0

在添加邻居语句(我用“新”评论)之前,一切正常。现在,使用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
4

1 回答 1

2

问题的根源很可能是以下行:

all_rel_rotations = neighbors = []

在 Python 中,列表是可变的,all_rel_rotations并且neighbors指向同一个列表,所以如果你这样做,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 = []
于 2019-05-04T17:21:52.420 回答