有人可以解释这段代码在做什么吗?
a = np.array([[1, 2], [3, 4]])
a[..., [True, False]]
[True, False]
在那里做什么?
答案 0 :(得分:1)
省略号表示法和布尔值作为整数
省略号扩展到以下数量:制作与x.ndim相同长度的选择元组所需的对象。可能只有一个省略号
True
和False
are just obfuscated 0 and 1。以文档为例:
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不同)。 A lot of the hairy details can be found here。这些似乎没有代码中的任何内容,但它们很有趣,可以确定numpy索引的工作原理。
特别是,这条线可能是您正在寻找的:
将来布尔数组喜欢(比如python bools列表)会 始终被视为布尔索引
On this page,他们谈论布尔数组,它们作为索引工具非常复杂
用作索引的布尔数组以不同的方式处理 完全比索引数组。布尔数组必须具有相同的形状 作为索引数组的初始维度
稍微减少
与整数索引数组的情况不同,在布尔情况下, result是包含索引数组中所有元素的1-D数组 对应于布尔数组中的所有真实元素。该 索引数组中的元素总是被迭代并返回 行主(C风格)顺序。结果也是一样的 Y [np.nonzero(B)]。与索引数组一样,返回的是副本 数据,而非用切片获取的视图。