2012-05-01 13 views
2

Предположим, у меня есть Numpy массив:Как добавить вычисляемый/вычисленный столбец в numpy?

1 10 
2 20 
3 0 
4 30 

, и я хочу, чтобы добавить третий столбец, где каждая строка представляет собой сумму (или некоторый произвольный расчет) из первых двух столбцов в этой строке:

1 10 11 
2 20 22 
3 0 3 
4 30 34 

Как это сделать?

ответ

1
import numpy 

my_arr = numpy.array([[1, 10], 
         [2, 20], 
         [3, 0], 
         [4, 30]]) 
column0 = my_arr[:,0:1] # Use 0:1 as a dummy slice to maintain a 2d array 
column1 = my_arr[:,1:2] # Use 1:2 as a dummy slice to maintain a 2d array 
new_column = column0 + column1 
my_arr = numpy.hstack((my_arr, new_column)) 
3

Попробуйте следующую

Примечание np.sum вдоль оси 1 добавит элементов строки мудрым. Вы можете изменить результат в виде матрицы-столбца и, наконец, добавить к исходному массиву

>>> new_col = np.sum(x,1).reshape((x.shape[0],1)) 
>>> np.append(x,new_col,1) 
array([[ 1, 10, 11], 
     [ 2, 20, 22], 
     [ 3, 30, 33], 
     [ 4, 40, 44]]) 

или в одной строке

np.append(x,np.sum(x,1).reshape((x.shape[0],1)),1) 
2

Для этих видов расчетов встроенного map function очень полезно , Остается добавить результат вычисления в третий столбец. Для суммирования:

>>> import numpy as np 
>>> my_arr = np.array([[1, 10], [2, 20], [3, 0], [4, 30]]) 
>>> np.vstack((my_arr.T, map(sum, my_arr))).T 
array([[ 1, 10, 11], 
     [ 2, 20, 22], 
     [ 3, 0, 3], 
     [ 4, 30, 34]]) 

Он также работает с другими функциями:

>>> my_func = lambda x: 2*x[0] + x[1] 
>>> np.vstack((my_arr.T, map(my_func, my_arr))).T 
array([[ 1, 10, 12], 
     [ 2, 20, 24], 
     [ 3, 0, 6], 
     [ 4, 30, 38]]) 
Смежные вопросы