2014-01-10 5 views
0

Я создал массив NumPy,массив NumPy/Python

a = numpy.array([[1,2,3][4,5,6]]) 

Я хочу сделать массив выглядеть следующим образом [[1,4],[2,5],[3,6]], а также после того, как я внести изменения, я хочу, чтобы вернуться к исходной структуре.

Есть ли команда NumPy для запуска функции для всех значений, например a[0] * 2?

Результат должен быть

[[2,8][2,5][3,6] 

ответ

5

Вы хотите транспонирует массив (считайте матрицы). Numpy массивы имеют метод для этого:

a = np.array([[1,2,3],[4,5,6]]) 
b = a.T # or a.transpose() 

Но обратите внимание, что б теперь вид из а; если вы измените значение b, изменится также (это экономит память и время, иначе потраченное на копирование).

Вы можете изменить первый столбец б с

b[0] *= 2 

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

b = a.T.copy() 

Если вы хотите изменить, обратите внимание, что вы можете сразу же изменить значения, которые вы хотите в себе:

a[:, 0] *= 2 
1

Вы можете использовать zip на ndarray и передать его numpy.array:

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

In [37]: b = np.array(zip(*a)) 

In [38]: b 
Out[38]: 
array([[1, 4], 
     [2, 5], 
     [3, 6]]) 

In [39]: b*2 
Out[39]: 
array([[ 2, 8], 
     [ 4, 10], 
     [ 6, 12]]) 

Использование numpy.column_stack для чистого NumPy раствора:

In [44]: b = np.column_stack(a) 

In [45]: b 
Out[45]: 
array([[1, 4], 
     [2, 5], 
     [3, 6]]) 

In [46]: b*2 
Out[46]: 
array([[ 2, 8], 
     [ 4, 10], 
     [ 6, 12]]) 
Смежные вопросы