从for循环到Python中的数组

时间:2017-07-07 01:18:04

标签: python python-3.x numpy

for i in range(2,Nx-2):
    lyr1[i]=lyr0[i]-coef*(lyr0[i]*(lyr0[i+1]-lyr0[i-1])/2+(dsqr/(deltax)**2)*(lyr0[i+2]-2*lyr0[i+1]+2*lyr0[i-1]-lyr0[i-2]))

lyr1=lyr0[0:Nx]-coef*(lyr0[0:Nx]*(lyr0[2:Nx]-lyr0[0:Nx-2])/2+(dsqr/(deltax)**2)*(lyr0[1:Nx+1]-2*lyr0[0:Nx]+2*lyr0[2:Nx-2]-lyr0[3:Nx-3]))

我正在尝试将for循环(上面)更改为对数组的操作。我目前收到广播错误,但我需要能够只选择数组的部分以匹配我的数字集成方案。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:0)

问题是您使用不同维度的向量(由于您的切片),例如len(lyr0[0:Nx]) == 2 + len(lyr0[2:Nx])。 Numpy尝试broadcast这些操作来匹配矢量大小,但它们具有不兼容的维度(不是1,不是彼此的倍数等)。

然而,广播并不是你想要做的事情(从你的循环实现来判断)。看来你宁愿做一个前瞻/回顾。请尝试使用numpy的roll函数明确地移动lyr0中的值。