Укладывать каждые 2 массива в 2D массив, используя NumPy без циклов - PullRequest
0 голосов
/ 16 февраля 2019

Итак, допустим, у меня есть массив, подобный следующему:

[
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
]

Я пытаюсь объединить каждые 2 массива вместе, поэтому я получаю следующее:

 [
 [[1, 2, 3], [1, 2, 3]],
 [[1, 2, 3], [1, 2, 3]],
 ]

Особенно важно, чтобы это было как можно более эффективным, так как это будет работать на не слишком мощном оборудовании, поэтому я бы предпочел сделать это без зацикливания массива.Есть ли способ реализовать это в NumPy без использования циклов?Заранее спасибо.

1 Ответ

0 голосов
/ 16 февраля 2019

Если ваше первое измерение четное (кратное 2), вы можете использовать reshape для преобразования вашего 2-D массива в 3-D массив следующим образом.Единственное здесь - использовать первое измерение как int(x/2), где x - это первое измерение вашего двумерного массива, а второе измерение как 2. Важно преобразовать в int, потому что аргумент формы долженбыть целочисленным.

arr_old = np.array([
               [1, 2, 3],
               [1, 2, 3],
               [1, 2, 3],
               [1, 2, 3],
               ])

x, y = arr_old.shape # The shape of this input array is (4, 3)

arr_new = arr_old.reshape(int(x/2), 2, y) # Reshape the old array

print (arr_new.shape)  
# (2, 2, 3)

print (arr_new)

# [[[1 2 3]
#  [1 2 3]]

# [[1 2 3]
#  [1 2 3]]]    

Как указано @orli в комментариях, вы также можете сделать

arr_old.shape = (x//2, 2, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...