添加新行会导致 numpy.asarray 中出现 ValueError

Adding new lines results in ValueError in numpy.asarray

在添加邻居语句(我用 'new' 评论)之前,一切正常。现在,当使用numpy.asarray时,出现以下错误:

ValueError:无法将形状 (3,3) 中的输入数组广播到形状 (3)。

我真的很困惑,因为新行没有改变旋转数组的任何内容。

def rre(mesh, rotations):
"""
Relative Rotation Encoding (RRE).
Return a compact representation of all relative face rotations.
"""
all_rel_rotations = neighbors = []
for f in mesh.faces():
    temp = [] # new
    for n in mesh.ff(f):
        rel_rotation = np.matmul(rotations[f.idx()], np.linalg.inv(rotations[n.idx()]))
        all_rel_rotations.append(rel_rotation)
        temp.append(n.idx()) # new
    neighbors.append(temp) # new
all_rel_rotations = np.asarray(all_rel_rotations)
neighbors = np.asarray(neighbors) # new
return all_rel_rotations, neighbors

问题的根源很可能是行:

all_rel_rotations = neighbors = []

在 Python 中列表是可变的并且 all_rel_rotationsneighbors 指向同一个列表,所以如果你这样做 all_rel_rotations.append(42) 你会看到 neighbors = [42, ]

行:

all_rel_rotations.append(rel_rotation)

附加一个二维数组,而

neighbors.append(temp)

将一维数组(或相反的方式)附加到同一个列表。那么:

all_rel_rotations = np.asarray(all_rel_rotations)

尝试转换为数组并感到困惑。

如果需要列表做

all_rel_rotations = []
neighbors = []