Начинающий Python Numpy: получение массива с формой ((M, N), (M, N)) - PullRequest
0 голосов
/ 28 ноября 2018

В качестве ввода для кода мне нужен 'ndarray' (назовите его C), форма которого: ((4, N), (4, N)).Итак, если N = 3, я подумал, что могу построить это следующим образом:

import numpy as np
A=np.array([[1, 2,3], [0.1, 0.2,0.3],[0.4,0.5,0.6],[0.7,0.8,0.9]])
B=np.array([[4,5,6], [0.4, 0.5,0.6],[0.7,0.8,0.9],[0.7,0.8,1]])

Поэтому, как я могу объединить A и B, чтобы получить C, чья форма ((4,3),(4,3)) (st C [0] также должен быть A, а C [1] должен быть B)?

Я пытался:

C=np.concatenate(([A], [B]), axis=0)

, но полученная C-форма была (2, 4, 3) вместо ((4,3), (4,3)).Тогда я наивно пытался изменить форму C:

C.reshape((4,3),(4,3)) 

, но затем я получаю сообщение об ошибке.

Извините, если вопрос слишком простой, я только начал использовать python.

Бест,

Стивен

1 Ответ

0 голосов
/ 28 ноября 2018

Для того, чтобы сделать то, что вы просите, проще, если вы понимаете, как работает numy ndarrays.В примере, который вы перечисляете, вы можете создать массив именно этого типа в трех измерениях со следующей формой:

numpy.zeros((4,N,2));

Это создаст массив с запрашиваемой формой.Страница документации по созданию массива numy содержит много полезной информации о том, как его использовать.

Однако, если вы хотите объединить два массива, есть много способов сделать это.

stacked0=numpy.stack(A,B)                # Stack the arrays along a new axis (a 3rd axis in this case)
stacked0.shape                           # outputs (2,4,3) in the example arrays.      

Это создало новую ось и слилось вдоль нее, в этом случае по умолчанию замещает первую ось (ось = 0) и смещает оставшиеся оси вниз.Это имеет значение только для случаев, когда вам нужно проиндексировать его позже, а также для повышения производительности в сложных приложениях.Самое важное для новичка - понять, по какой оси вы хотите объединиться.

stacked1=numpy.stack([A,B],axis=1)    # Replaces the second axis to stack
stacked1.shape                        # (4,2,3)
stacked2=numpy.stack([A,B],axis=2)    # Appends a third axis
stacked2.shape                        # (4,3,2)

Вы также можете объединить их по существующим осям.

concated0 = numpy.concatenate([A,B],axis=0) # merges them along the first axis
concated0.shape                  # (8,3)
concated1 = numpy.concatenate([A,B],axis=1)
concated1.shape                  # (4,6)

См. Документы по управлению массивами для получения дополнительной информации о том, как переставить массивы.

...