簡體   English   中英

numpy:播放布爾的ndarray

[英]numpy: broadcasting ndarray of booleans

我有一個情況,我有一個浮點數的ndarray X,讓我們說100x10,我想看看第一列的一些條件,並創建一個形狀為100x1的布爾ndarray B. 然后我想使用B作為X的索引來拉出True所在的值。 然而,對於BI中的每個True,想要拉出X的整行。我認為這將自動工作,因為B將被廣播為100x10的形狀。 但是它似乎沒有這種方式。 這是使用2x2和2x1 ndarrays的示例。

a = np.array([True, False])
a.shape = (2,1)
b = np.array([1, 2, 3, 4])
b.shape = (2,2)
print(a)
print(b)
print(b[a])

這打印

[[True]
 [False]]

[[ 1 2 ]
 [ 3 4 ]]

 [1]

我期望它打印[1 2] 為什么廣播不像我期望的那樣工作?

這里詳細介紹了所謂的“扇形索引”的規則。 特別是,當索引obj是dtype bool的NumPy數組時, x[obj]

...總是等於(但快於)x [obj.nonzero()]其中,如上所述,obj.nonzero()返回一個整數索引數組的元組(長度為obj.ndim),顯示True元素OBJ。

以來,

In [4]: a.nonzero()
Out[4]: (array([0]), array([0]))

b[a]相當於b[a.nonzero()]

In [6]: b[(np.array([0]), np.array([0]))]
Out[6]: array([1])
In [7]: b[a]
Out[7]: array([1])

如果你想使用一個boolean數組a選擇的 b ,然后,作為Joran比斯利指出,只要保持a作為一維布爾數組:

import numpy as np

a = np.array([True, False])
b = np.array([1, 2, 3, 4])
b.shape = (2,2)
print(b[a])    
# [[1 2]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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