#python #arrays
#питон #массивы
Вопрос:
В Python у меня есть 3-мерный массив A
:
A=np.random.random((3,2,3)) print(A) Out[6]: [[[0.89565135 0.79502322 0.89015957] [0.40303084 0.80496231 0.50278239]] [[0.70610822 0.61269108 0.00470925] [0.29734101 0.67986295 0.34584381]] [[0.71822397 0.99326199 0.40949422] [0.97733739 0.38916931 0.91475145]]]
Я хотел бы выбрать первый элемент каждой подматрицы и создать из них массив [0.89565135,0.70610822,0.71822397]
, поэтому я попробовал следующую формулу : A[:][0][0],A[0][:][0],A[0][0][:]
но все они дают мне один и тот же результат, который я не ожидаю…
A[:][0][0] Out[7]: array([0.89565135, 0.79502322, 0.89015957]) A[0][:][0] Out[8]: array([0.89565135, 0.79502322, 0.89015957]) A[0][0][:] Out[9]: array([0.89565135, 0.79502322, 0.89015957])
Какую формулу я могу использовать, чтобы получить правильный массив, и как вышеприведенная формула дает тот же результат ?
Комментарии:
1. Сравните
A[:,0,0]
сA[0,:,0]
и.A[0,0,:]
Все еще идентичны?
Ответ №1:
Вы можете сделать следующее, чтобы выбрать для всего канала первый элемент матрицы:
A[:, 0, 0]
:
ссылается на все каналы, 0
первую строку и 0
первый столбец.
Выход:
array([0.89565135,0.70610822,0.71822397])
Редактировать:
Если вы работаете с вложенными list
, вы можете сделать следующее:
[array[0][0]for array in A]
Это показывает одно из преимуществ numpy
array перед python list
, поскольку выбор намного проще (и быстрее) в использовании numpy
.
Комментарии:
1. Но все же, если я напишу массив напрямую, а не как массив numpy :
A=[[[0.89565135, 0.79502322, 0.89015957], [0.40303084, 0.80496231, 0.50278239]], [[0.70610822, 0.61269108, 0.00470925], [0.29734101, 0.67986295, 0.34584381]], [[0.71822397, 0.99326199, 0.40949422], [0.97733739, 0.38916931, 0.91475145]]]
проблема остается. У вас есть какая-нибудь идея на этот счет ?2. Я добавил решение с использованием вложенных
list
. Однако я бы посоветовал выполнить эту операцию сnumpy
, так как она намного эффективнее.
Ответ №2:
Ваша идея индексирования здесь немного ошибочна, когда вы делаете A[:][0][0]
то, что вы делаете, это A[:]
будет означать в основном всю матрицу, из которой вы указываете первый индекс, используя A[:][0]
который будет
[[0.89565135 0.79502322 0.89015957] [0.40303084 0.80496231 0.50278239]]
из которых вы дополнительно указываете первый индекс A[:][0][0]
, который даст вам первую строку
[0.89565135 0.79502322 0.89015957]
Следуя аналогичной логике, вы можете видеть, что во второй схеме индексирования вы эффективно делаете то же самое. Что вам нужно сделать, так это сделать
A[0][0][0] A[1][0][0] A[2][0][0]
которые вы можете написать коротким почерком
A[:,0,0]