假设我有一个numpy数组:我想添加第三列,每行是该行前两列的总和(或一些任意计算):我该怎么做呢?
pgvzfuti1#
尝试以下注意,沿沿着轴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)
型
wqsoz72f2#
几乎是新的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_沿着_axis在2012年不可用?
olqngx593#
对于这些类型的计算,内置的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]])
wwodge7n4#
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))
字符串
4条答案
按热度按时间pgvzfuti1#
尝试以下
注意,沿沿着轴1求和会将元素逐行相加,然后可以将结果整形为列矩阵,最后追加到原始数组中
字符串
或在一行中
型
wqsoz72f2#
几乎是新的numpy.寻找一个解决同样的问题,我发现这似乎相当线性:
字符串
也许apply_沿着_axis在2012年不可用?
olqngx593#
对于这些类型的计算,内置的map函数非常有用。它只需要将计算结果添加到第三列。对于求和:
字符串
它还与其他功能一起工作:
型
wwodge7n4#
字符串