Расширить размер массива и изменить форму массива - PullRequest
1 голос
/ 13 мая 2019

Итак, у меня есть массив numpy, содержащий:

arr =  [1 2 3 4 5 6]

и когда я выполню:

print(arr.shape)

это дает мне:

(6,)

Я пытаюсь добавить в постоянное значение 3

 const_val = 3

в размерности массива, чтобы я получил:

(6,3)

Сначала я попытался расширить размерность массива:

arr = np.expand_dims(arr, axis = -1)

где сейчас:

print(arr.shape)

возвращает меня:

(6,1)

Однако, когда я пытаюсь изменить размер массива, чтобы заменить 1 на постоянное значение 3,

arr = np.reshape(arr, (arr.shape[0], const_val))

Я получаю сообщение об ошибке:

ValueError: cannot reshape array of size 6 into shape (6,3)

Могу ли я знать, почему это произошло?

Ответы [ 3 ]

0 голосов
/ 13 мая 2019

При изменении формы с (6,1) на (6,3) вам необходимо «ввести некоторые значения», поскольку вы переходите с 6 записей на 18. Хотите, чтобы два новых столбца были идентичны первому? В этом случае используйте numpy.tile как:

arr_6_3 = np.tile(arr, (1,3))
0 голосов
/ 13 мая 2019

Если я правильно понимаю ваше требование, вам понадобится следующее решение:

In [55]: arr =  np.array([1, 2, 3, 4, 5, 6])

# our new desired shape
In [56]: new_shape = (6, 3)

# broadcast to `new_shape` and make it writable 
# since `broadcast_to` returns a non-writable and referenced array
In [57]: arr_new = np.array(np.broadcast_to(arr[:, None], new_shape))

# copy the constant value
In [58]: arr_new[:, 1:] = const_val

In [59]: arr_new
Out[59]: 
array([[1, 3, 3],
       [2, 3, 3],
       [3, 3, 3],
       [4, 3, 3],
       [5, 3, 3],
       [6, 3, 3]])

Если, с другой стороны, вы просто хотите скопировать этот же массив в новую форму, используйте:

In [63]: const_val = 3

In [64]: new_shape = (arr.shape[0], const_val)

In [65]: arr_new = np.array(np.broadcast_to(arr[:, None], new_shape))

In [66]: arr_new
Out[66]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5],
       [6, 6, 6]])

In [67]: arr_new.shape
Out[67]: (6, 3)
0 голосов
/ 13 мая 2019

Хотите добавить два пустых столбца в ваш массив?В этом случае вы можете объединить матрицу размера (6,2):

arr = np.array([1,2,3,4,5,6]).reshape(6,1)
to_add = np.zeros((6,2))
res = np.concatenate((arr, to_add), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...