gpt4 book ai didi

python - Python 中 numpy 叉积的 Rollaxis 错误

转载 作者:行者123 更新时间:2023-12-01 04:42:27 24 4
gpt4 key购买 nike

我一直在尝试确定这个简单脚本的错误来源,该脚本采用 numpy.array 作为输入并从数据集中生成一个新的格子

def reciprocalLat(lattice):
for i,a in enumerate(lattice):
print a
b[i]=numpy.cross(a[(i+1)%3],a[(i+2)%3],axis=0)
#/numpy.dot(a[i],numpy.cross(a[(i+1)%3],a[(i+1)%3]),0)

当我尝试改变我的网格,甚至使用精简的示例和多种不同的方式

喜欢

print numpy.cross(lat[(1)%3],lat[(2)%3],axis=0)

print numpy.cross(lat[(1)%3],lat[(2)%3])

我刚刚收到此错误

ValueError: rollaxis: axis (0) must be >=0 and < 0

rollaxis 在这个问题中做了什么,它在这个问题中做了什么,以及当我分配一个值时我到底设置了什么。如何修复此错误(如何小于 1 且大于或等于 1?)

我的测试矩阵是:

[['4.7480001450' '-2.3740000725' '0.0000000000']
['0.0000000000' '4.1118887427' '0.0000000000']
['0.0000000000' '0.0000000000' '15.4790000916']]

最佳答案

使用新版本的np.cross(它使用rollaxis而不是swap),我可以通过以下方式产生此错误:

In [663]: np_cross.cross(lat[0,0],lat[0,1],axis=0)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-663-ee756043fbb9> in <module>()
----> 1 np_cross.cross(lat[0,0],lat[0,1],axis=0)

/home/paul/mypy/np_cross.py in cross(a, b, axisa, axisb, axisc, axis)
96 b = asarray(b)
97 # Move working axis to the end of the shape
---> 98 a = rollaxis(a, axisa, a.ndim)
99 b = rollaxis(b, axisb, b.ndim)
100 msg = ("incompatible dimensions for cross product\n"

/usr/lib/python3/dist-packages/numpy/core/numeric.py in rollaxis(a, axis, start)
1340 msg = 'rollaxis: %s (%d) must be >=0 and < %d'
1341 if not (0 <= axis < n):
-> 1342 raise ValueError(msg % ('axis', axis, n))
1343 if not (0 <= start < n+1):
1344 raise ValueError(msg % ('start', start, n+1))

ValueError: rollaxis: axis (0) must be >=0 and < 0

也就是说,当将标量(或 0d)数组传递给 cross 时,您会收到此 rollaxis 错误。因此,请确保将向量传递给 cross (即至少一维数组)。

例如,如果latice是二维的

for i,a in enumerate(lattice):
print a
b[i]=numpy.cross(a[(i+1)%3],a[(i+2)%3],axis=0)

那么 a 是 1d,a[1] 是标量。

<小时/>

这就是你的目标吗?

In [675]: lat
Out[675]:
array([[ 4. , -2.3, 0. ],
[ 0. , 4.1, 0. ],
[ 0. , 0. , 15. ]])

In [676]: np.vstack([np_cross.cross(lat[(i+1)%3],lat[(i+2)%3]) for i,a in enumerate(lat)])
Out[676]:
array([[ 61.5, 0. , 0. ],
[ 34.5, 60. , -0. ],
[ -0. , 0. , 16.4]])

我对您对 %3 的使用感到困惑,但从您的评论来看,您正在尝试执行 b[0,:] = cross(lat[1,:], lat[ 2、:])

但是 cross 本身就是在进行这种排列配对。来自旧的交叉:

        x = a[1]*b[2] - a[2]*b[1]
y = a[2]*b[0] - a[0]*b[2]
z = a[0]*b[1] - a[1]*b[0]

关于python - Python 中 numpy 叉积的 Rollaxis 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30284478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com