我有一个情况,我有一个浮点数的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])
Run Code Online (Sandbox Code Playgroud)
这打印
[[True]
[False]]
[[ 1 2 ]
[ 3 4 ]]
[1]
Run Code Online (Sandbox Code Playgroud)
我希望它能打印出来[1 2]
.为什么广播不像我期望的那样工作?
这里详细介绍了所谓的"扇形索引"的规则.特别是,当索引obj
是dtype的NumPy数组时bool
,x[obj]
...总是等于(但快于)x [obj.nonzero()]其中,如上所述,obj.nonzero()返回一个整数索引数组的元组(长度为obj.ndim),显示True元素OBJ.
以来,
In [4]: a.nonzero()
Out[4]: (array([0]), array([0]))
Run Code Online (Sandbox Code Playgroud)
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])
Run Code Online (Sandbox Code Playgroud)
如果你想使用一个布尔数组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]]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
272 次 |
最近记录: |