Добавление новых строк приводит к ValueError в numpy.asarray - PullRequest
0 голосов
/ 04 мая 2019

До добавления операторов соседей (которые я прокомментировал как 'new') все работало просто отлично.Теперь при использовании numpy.asarray возникает следующая ошибка:

ValueError: не удалось преобразовать входной массив из формы (3,3) в shape (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

1 Ответ

2 голосов
/ 04 мая 2019

Источником проблемы, скорее всего, является строка:

all_rel_rotations = neighbors = []

В Python списки являются изменяемыми, а all_rel_rotations и neighbors указывают на один и тот же список, поэтому, если вы сделаете all_rel_rotations.append(42), вы увидите, что neighbors = [42, ]

Строка:

all_rel_rotations.append(rel_rotation)

добавляет 2D-массив, а

neighbors.append(temp)

добавляет одномерный массив (или наоборот) к тому же списку. Тогда:

all_rel_rotations = np.asarray(all_rel_rotations)

пытается преобразовать в массив и запутаться.

Если вам нужно перечислить, сделайте

all_rel_rotations = []
neighbors = []
...