2012-05-31 3 views
0

Я хотел бы изменить следующий Numpy массив в IPython:Изменение формы Numpy массив

array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]) # Array A 

к:

array([[1, 5, 9],[2, 6, 10],[3, 7, 11],[4, 8, 12]]) # Array B 

Основная задача состоит в том, чтобы вычислить среднее значение первых элементов массива A (что означает среднее значение 1,5,9), затем два элемента и т. д.

Я думал, что самый простой способ сделать это - изменить матрицу и затем вычислить ее среднее значение.

Есть ли способ сделать это без прохождения через массив через цикл for?

+0

Являются ли эти массивы NumPy? –

+0

Да, это массивы numpy –

ответ

1

Для выполнения таких расчетов вы должны использовать numpy.

Предполагая, что ваш исходный массив:

a.transpose() 

будет делать трюк

+0

Есть ли разница между 'a.T' и' a.transpose() ', о которых вы знаете? – mgilson

+0

'aT' для коротких – wim

+0

Я думал, что они будут, но я решил, что попрошу убедиться, что один не вернул копию, в то время как другой вернул« представление »или что-то в этом роде. – mgilson

8

Используйте axis ключевое слово на mean; нет необходимости reshape:

>>> A = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]]) 
>>> A.mean(axis=0) 
array([ 5., 6., 7., 8.]) 

Если вы хотите, чтобы массив B аут, то вам не нужно транспонировать массив, а не изменить его форму:

>>> A.T 
array([[ 1, 5, 9], 
     [ 2, 6, 10], 
     [ 3, 7, 11], 
     [ 4, 8, 12]]) 

Но тогда вы должны были бы дать axis=1 к mean.

+0

большое спасибо за ответ! отлично работает для моей проблемы! –

Смежные вопросы