如何使用numpy有效地从每列中减去值

时间:2019-03-28 02:51:45

标签: python arrays numpy matrix

我有一个2D形状的数组(50,50)。我需要从此数组的每一列中减去一个值(跳过第一列),该值是基于该列的索引计算的。例如,使用for循环将看起来像这样:

for idx in range(1, A[0, :].shape[0]):
    A[0, idx] -= idx * (...) # simple calculations with idx 

现在,当然可以,但是它非常慢,并且性能对于我的应用程序至关重要。我试过使用np.fromfunction()计算要减去的值,然后从原始数组中减去它,但是结果与for循环迭代减法得到的结果不同:

 func = lambda i, j: j * (...) #some simple calculations
 subtraction_matrix = np.fromfunction(np.vectorize(func), (1,50))

 A[0, 1:] -= subtraction_matrix

我在做什么错?还是有其他更好的方法?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

您的所有代码段均指示您只要求在 Stephen Thompson Anthony Pettis 0 1 47 of 107 32 of 55 43% 58% 47 of 107 的第一行中进行减法操作(尽管您没有明确提及)。因此,我正在着手进行了解。

关于使用Fighter A Fighter B KD TKD S TS Stephen Thompson Anthony Pettis 0 1 47 of 107 32 of 55 43% 58% etc... 的信息,可以如下使用A

from_function()

进行测试(假设形状为subtraction_matrix而不是A[0,1:] -= subtraction_matrix[1:]

(5,5)

输出:

(50,50)

如果希望减法发生在import numpy as np A = np.arange(25).reshape(5,5) print (A) func = lambda j: j * 10 #some simple calculations subtraction_matrix = np.fromfunction(np.vectorize(func), (5,), dtype=A.dtype) A[0,1:] -= subtraction_matrix[1:] print (A) all 行中,则只需使用行[[ 0 1 2 3 4] # print(A), before subtraction [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24]] [[ 0 -9 -18 -27 -36] # print(A), after subtraction [ 5 6 7 8 9] [ 10 11 12 13 14] [ 15 16 17 18 19] [ 20 21 22 23 24]] ,而不是行A