【问题标题】:How to efficiently subtract values from each column with numpy如何使用numpy有效地从每列中减去值
【发布时间】:2019-03-28 02:51:44
【问题描述】:

我有一个形状为 (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

我做错了什么?或者有没有其他更好的方法?任何帮助表示赞赏!

【问题讨论】:

  • 你能举个输入/输出的例子吗?

标签: python arrays numpy matrix


【解决方案1】:

您的所有代码 sn-ps 都表明您需要仅在 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:]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多