亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 NumPy 中使用兩個布爾數組進行索引

在 NumPy 中使用兩個布爾數組進行索引

慕勒3428872 2024-01-04 17:22:47
我在 numpy 數組中有一些數據,然后我想選擇子集的子集,并更新這些值。假設第一個數組 A 有 N 個元素。然后,我使用布爾數組 mask1,其中 N 個元素作為掩碼來選擇第一個子集。然后,我使用第二個布爾數組 mask2 和 sum(mask1) 元素來選擇第一個子集的子集。但是當我嘗試更新這些值時,它們不會存儲到原始數組中。代碼示例: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]正如預期的那樣。但是當我嘗試更新以這種方式索引的值時,它不起作用。# Trying to update those values does not work:A[mask1][mask2] = -1print(A)這將打印原始的、未更改的數組:[0 1 2 3 4 5 6 7 8 9]如果我僅使用一個布爾數組進行索引,那么值就會更新,所以這是一種可能的解決方法。但是,我正在為物理過程實現一種算法,其中首先創建一個掩碼,根據一個標準進行子集化,然后根據另一個標準進一步對它進行子集化,這是非常自然的,所以如果我可以將其實現,那將非常優雅工作。
查看完整描述

1 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

一個高性能的將是鏈式掩蔽-

mask1[mask1] = mask2
A[mask1] = -1

性能不太好 -

A[np.flatnonzero(mask1)[mask2]] = -1


查看完整回答
反對 回復 2024-01-04
  • 1 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號