如何在numpy中添加计算/计算列?

问题描述 投票:0回答:4

假设我有一个 numpy 数组:

1 10
2 20
3 0
4 30

我想添加第三列,其中每行是该行中前两列的总和(或某种任意计算):

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

我该怎么做?

python arrays numpy calculated-columns
4个回答
5
投票

对于此类计算,内置的 map 函数 非常有用。只需将计算结果添加到第三列即可。求和:

>>> 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]])

4
投票
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)

0
投票

对于 numpy 来说几乎是新手。在寻找同一问题的解决方案时,我发现这似乎非常线性:

import numpy as np
my_arr = np.array([[1, 10], [2, 20], [3, 0], [4, 30]])
my_func = lambda x: 2*x[0] + x[1]
new_col = np.apply_along_axis(my_func, axis = 1, arr = my_arr)
my_arr = np.column_stack((my_arr, new_col))

my_arr
array([[ 1, 10, 12],
       [ 2, 20, 24],
       [ 3,  0,  6],
       [ 4, 30, 38]])

也许 apply_along_axis 在 2012 年不可用?

© www.soinside.com 2019 - 2024. All rights reserved.