Python 用布尔值追加numpy数组

Python 用布尔值追加numpy数组,python,numpy,Python,Numpy,有人能解释一下这个代码在做什么吗 a = np.array([[1, 2], [3, 4]]) a[..., [True, False]] [True,False]在那里做什么?省略号和布尔值作为整数 : 省略号扩展到:个对象,这些对象需要创建与x.ndim长度相同的选择元组。可能只存在一个省略号 True和False。以文档为例: x = np.array([[[1],[2],[3]], [[4],[5],[6]]]) x[...,0] # outputs: array([[1,

有人能解释一下这个代码在做什么吗

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

[True,False]
在那里做什么?

省略号和布尔值作为整数

:

省略号扩展到:个对象,这些对象需要创建与x.ndim长度相同的选择元组。可能只存在一个省略号

True
False
。以文档为例:

x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x[...,0]
# outputs: array([[1, 2, 3],
#       [4, 5, 6]])
x[..., False] # same thing
布尔值指定索引,就像数字0或1一样


回复您在评论中的问题

首先看起来很神奇

a = np.array([[1, 2], [3, 4]])
a[..., [True, True]]  # = [[2,2],[4,4]]
<>但是当我们认为它是

a[..., [1,1]] # = [[2,2],[4,4]]
这似乎没那么令人印象深刻

同样地:

b = array([[1,2,3],[4,5,6]])
b[...,[2,2]] # = [[3,3],[5,5]]
应用省略号规则后;真抓取列索引和假抓取列索引,就像0、1或17一样


用于复杂索引的布尔数组

有一些细微的差别(bool与int的类型不同)。这些似乎在您的代码中没有任何作用,但它们对于弄清楚numpy索引是如何工作的很有意思

特别是,这一行可能就是您要寻找的:

在未来,布尔数组类(例如python布尔列表)将 始终被视为布尔索引

他们讨论的是布尔数组,它作为索引工具非常复杂

用作索引的布尔数组以不同的方式处理 完全优于索引数组。布尔数组必须具有相同的形状 作为要索引的数组的初始维度

跳下来一点

与整数索引数组不同,在布尔型数组中 结果是一个一维数组,包含索引数组中的所有元素 对应于布尔数组中的所有真元素。这个 索引数组中的元素总是迭代并以 行主(C样式)顺序。结果也与实验结果一致 y[np.非零(b)]。与索引数组一样,返回的是 数据,而不是通过切片获得的视图


在numpy 1.10和1.11上,这与
a[…,[1,0]]
加上一个未来警告是一样的。这意味着什么?如果是这样的话,为什么
a[…,[True,True]]
返回
数组([[2,2],[4,4]])
@JRR对不起,我不是想把答案缩短一点soon@JRR您可以确认[…,[True,True]]计算方法与[…,[1,1]]相同,正确吗?@en_Knight,根据,当索引为列表时,布尔值转换为相应的整数,所得值用作矩阵中的实际索引。我个人也从我这边证实,他们确实是一样的。@MaThMaX我们在同一页上,对吗?下面这一部分并不是为了让人们感到困惑,只是为了帮助澄清一些numpy术语是否令人害怕。如果不清楚,我可以把它清理或移除。。。跳进小兔子洞很有趣:)