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

2024-03-28 12:32:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二维数组的形状(50,50)。我需要从这个数组的每一列中减去一个值(跳过第一列),这个值是基于该列的索引计算的。例如,使用For循环时,它会如下所示:

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

现在,这当然可以正常工作,但是速度非常慢,性能对我的应用程序至关重要。我试着用np.from函数(),然后从原始数组中减去它,但结果与for-loop i实际减法得到的结果不同:

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

 A[0, 1:] -= subtraction_matrix

我做错什么了?或者有其他更好的方法吗?感谢您的帮助!你知道吗


Tags: inforwithnprange数组simplematrix
1条回答
网友
1楼 · 发布于 2024-03-28 12:32:55

所有的代码片段都表明您要求减法只发生在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)

输出:

[[ 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的所有行中,只需使用A[:,1:] -= subtraction_matrix[1:]行,而不是A[0,1:] -= subtraction_matrix[1:]行即可

相关问题 更多 >