我有一个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
我在做什么错?还是有其他更好的方法?任何帮助表示赞赏!
答案 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