[英]numpy vectorized operation for a large array
我正在嘗試通過 python3 對 numpy 數組進行一些計算。
數組:
c0 c1 c2 c3
r0 1 5 2 7
r1 3 9 4 6
r2 8 2 1 3
這里的“cx”和“rx”是列名和行名。
如果元素不在給定的列列表中,我需要逐行計算每個元素的差異。
例如
given a column list [0, 2, 1] # they are column indices
which means that
for r0, we need to calculate the difference between the c0 and all other columns, so we have
[1, 5-1, 2-1, 7-1]
for r1, we need to calculate the difference between the c2 and all other columns, so we have
[3-4, 9-4, 4, 6-4]
for r2, we need to calculate the difference between the c1 and all other columns, so we have
[8-2, 2, 1-2, 3-2]
所以,結果應該是
1 4 1 6
-1 5 4 2
6 2 -1 1
因為數組可能非常大,我想通過numpy矢量化運算來計算,例如廣播。
但是,我不確定如何有效地做到這一點。
I have checked Vectorizing operation on numpy array , Vectorizing a Numpy slice operation , Vectorize large NumPy multiplication , Replace For Loop with Numpy Vectorized Operation , Vectorize numpy array for loop .
但是,它們都不適合我。
謝謝你的幫助 !
首先從數組中提取值,然后進行減法:
import numpy as np
a = np.array([[1, 5, 2, 7],
[3, 9, 4, 6],
[8, 2, 1, 3]])
cols = [0,2,1]
# create the index for advanced indexing
idx = np.arange(len(a)), cols
# extract values
vals = a[idx]
# subtract array by the values
a -= vals[:, None]
# add original values back to corresponding position
a[idx] += vals
print(a)
#[[ 1 4 1 6]
# [-1 5 4 2]
# [ 6 2 -1 1]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.