簡體   English   中英

大型數組的 numpy 向量化操作

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

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