[英]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.