我在 numpy 數(shù)組中有一些數(shù)據(jù),然后我想選擇子集的子集,并更新這些值。假設(shè)第一個數(shù)組 A 有 N 個元素。然后,我使用布爾數(shù)組 mask1,其中 N 個元素作為掩碼來選擇第一個子集。然后,我使用第二個布爾數(shù)組 mask2 和 sum(mask1) 元素來選擇第一個子集的子集。但是當(dāng)我嘗試更新這些值時,它們不會存儲到原始數(shù)組中。代碼示例:N = 10A = np.arange(N)# Create mask of size N, with only some True valuesmask1 = np.zeros(N, dtype = np.bool)mask1[:7] = True# Create mask of size (sum(mask1)), with only some True valuesmask2 = np.zeros(np.sum(mask1), dtype = np.bool)mask2[2:] = True# Indexing with both masks works as expected:print(A[mask1][mask2])這打印[2 3 4 5 6]正如預(yù)期的那樣。但是當(dāng)我嘗試更新以這種方式索引的值時,它不起作用。# Trying to update those values does not work:A[mask1][mask2] = -1print(A)這將打印原始的、未更改的數(shù)組:[0 1 2 3 4 5 6 7 8 9]如果我僅使用一個布爾數(shù)組進(jìn)行索引,那么值就會更新,所以這是一種可能的解決方法。但是,我正在為物理過程實(shí)現(xiàn)一種算法,其中首先創(chuàng)建一個掩碼,根據(jù)一個標(biāo)準(zhǔn)進(jìn)行子集化,然后根據(jù)另一個標(biāo)準(zhǔn)進(jìn)一步對它進(jìn)行子集化,這是非常自然的,所以如果我可以將其實(shí)現(xiàn),那將非常優(yōu)雅工作。
1 回答

冉冉說
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個贊
一個高性能的將是鏈?zhǔn)窖诒?/em>-
mask1[mask1] = mask2 A[mask1] = -1
性能不太好 -
A[np.flatnonzero(mask1)[mask2]] = -1
添加回答
舉報
0/150
提交
取消