Использование np.pad () для структурированного массива - PullRequest
0 голосов
/ 26 февраля 2020

Другой post У меня было именно то, что я хотел, но я не могу реализовать его в структурированном массиве.

Скажем, у меня есть такой массив:

>>> arr = np.empty(2, dtype=np.dtype([('xy', np.float32, (2, 2))]))
>>> arr['xy']
array([[[1., 1.],
        [2., 2.]],

        [3., 3.],
        [4., 4.]]], dtype=float32)

Мне нужно дополнить его так, чтобы последняя строка в каждом подмассиве повторялась указанное c число раз:

arr['xy'] = np.pad(arr['xy'], [(0, 0), (0, 2), (0, 0)], mode='edge')

Однако я получаю ValueError:

ValueError: could not broadcast input array from shape (2, 4, 2) into shape (2, 2, 2)

Итак, без структурированного массива я попробовал следующее:

>>> arr = np.array([[[1, 1], [2, 2]], [[3, 3], [4, 4]]])
>>> arr
array([[[1, 1],
        [2, 2]],

        [3, 3],
        [4, 4]]], dtype=float32)
>>> arr = np.pad(arr, [(0, 0), (0, 2), (0, 0)], mode='edge')
>>> arr
array([[[1, 1],
        [2, 2],
        [2, 2],
        [2, 2]],

        [3, 3],
        [4, 4],
        [4, 4],
        [4, 4]], dtype=float32)

Почему я не могу повторить со структурированным массивом?

1 Ответ

2 голосов
/ 26 февраля 2020

Ваше заполнение работает, назначение ar ["xy"] не выполняется, вы не можете изменить форму структуры.

>>> arr = np.empty(2, dtype=np.dtype([('xy', np.float32, (2, 2))]))
>>> ar2 = np.pad(arr['xy'], [(0, 0), (0, 2), (0, 0)], mode='edge')
>>> ar2.shape
(2, 4, 2)
>>> arr["xy"] = ar2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (2,4,2) into shape (2,2,2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...