簡體   English   中英

如何使用numpy有效地從每列中減去值

[英]How to efficiently subtract values from each column with numpy

我有一個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

我究竟做錯了什么? 或者還有其他方法會更好嗎? 任何幫助表示贊賞!

所有代碼片段都表明您要求減法發生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:]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM