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

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

numpy 中的 2D 布爾掩碼產生不同的結果(掩碼排序與原始索引)

numpy 中的 2D 布爾掩碼產生不同的結果(掩碼排序與原始索引)

DIEA 2021-08-11 21:35:50
我正在使用不同的索引方法。我有以下工作示例:import numpy as npx = np.random.rand(321,321)a = range(0, 300)b = range(1, 301)mask = np.zeros(x.shape, dtype=bool)# a and b are lists mask[a, b] = Trueassert x[a, b].shape == x[mask].shape  # passesassert np.isclose(np.sum(x[mask]), np.sum(x[a, b]))  # passesassert np.allclose(x[mask], x[a, b])  # fails sometimes當我用一個不同x的項目嘗試它時,最后一個斷言失敗了。這是一個失敗的案例:import numpy as npx = np.random.rand(431,431)a = [0, 1, 1, 1, 2, 2, 2, 3]b = [1, 0, 2, 4, 3, 1, 11, 2]mask = np.zeros(x.shape, dtype=bool)# a and b are lists mask[a, b] = Trueassert x[a, b].shape == x[mask].shape  # passesassert np.isclose(np.sum(x[mask]), np.sum(x[a, b]))  # passesassert np.allclose(x[mask], x[a, b])  # fails誰能解釋為什么會發生這個錯誤?我認為這是因為 mask 對 x 的索引與 (a,b) 不同,但不確定如何。我想這樣做是因為我想輕松獲得 x[~mask]
查看完整描述

3 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

您的示例的問題在于您如何定義a和b。如果您要打印出來x[a, b]并且x[mask]您會注意到第 5 個和第 6 個元素 onx[a, b]將與第 5 個和第 6 個值在x[mask]. 這樣做的原因是您將每個值設置mask為 True usinga和bto index 所以順序無關緊要,但您在斷言中使用a和b索引 x 所以順序很重要。當你做你的索引時,numpy 會a從你的矩陣中獲取每個值以從你的矩陣中獲取適當的行,并使用相同索引中的值b來索引到該行。舉例說明使用 3x8 數組:


a = [0, 1, 1, 1, 2, 2, 2]

b = [1, 0, 2, 4, 3, 1, 7]


x = [[1, 2, 3, 4, 5, 6, 7, 8],

    [9, 10, 11, 12, 13, 14, 15, 16],

    [17, 18, 19, 20, 21, 22, 23, 24]]


x[a, b] = [2, 9, 11, 13, 20, 18, 24]

mask[a, b] = [2, 9, 11, 13, 18, 20, 24]

解決此問題的一個好方法是首先定義a并b作為元組列表,首先按“a 值”對它們進行排序,然后按“b 值”對它們進行排序,然后從那里使用它們。這樣你就可以保證訂單。


查看完整回答
反對 回復 2021-08-11
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

x[a, b]從和x給定的順序中選擇元素。結果會排在前面。abx[a[i], b[i]]x[a[i+1], b[i+1]]

x[mask]通過mask以行優先順序迭代以查找True單元格,按給定的順序選擇元素。這只是相同的順序x[a, b],如果zip(a, b)已按字典順序排序。

在您失敗的示例中,在and2, 3之前2, 1出現,但按行優先順序迭代會找到at before 。因此,have before , while具有相反的那些元素。abmaskTrue2, 12, 3x[mask]x[2, 1]x[2, 3]x[a, b]


查看完整回答
反對 回復 2021-08-11
  • 3 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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