np.take
是一个函数,它沿沿着轴从数组中取出元素。当有一个轴参数指定它的行为完全像“花式”索引(索引使用数组),但没有轴参数的数组a是扁平的,然后从这个数组的索引。然而,文档中没有给出任何关于boolean
索引的内容,也没有说明布尔数组的行为:https://numpy.org/doc/stable/reference/generated/numpy.take.html
代码如下:
输入:
a = np.array([2, 3])
b = np.array([[False, True],
[ True, False],
[False, True],
[ True, False]])
a.take(b)
输出量:
array([[2, 3],
[3, 2],
[2, 3],
[3, 2]])
在这个特定的代码中,当我们有一个[True,False]列并与[False,True]列保持相同时,输出是如何切换的?现在,当我尝试使用boolean
索引时,我将索引作为boolean
数组,我得到一个错误:
输入:
a = np.array([2, 3])
b = np.array([[False, True],
[ True, False],
[False, True],
[ True, False]])
a[b]
输出量:
IndexError Traceback (most recent call last)
<ipython-input-6-8b64b196a893> in <cell line: 7>()
5 [ True, False]])
6
----> 7 a[b]
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
这个错误对我来说是有意义的,因为索引数组(b)有两个维度,而数组a只有一个维度。那么np.take
在做什么呢,它只是切换每行中的列?
1条答案
按热度按时间hgqdbh6s1#
在文档中,提到“如果索引不是一维的,输出也有这些维度",因此输出将以索引的形式出现。
数组“B”中的True和False分别充当1和0,即索引1和0。所以如果我用这个值替换它,我会得到同样的输出。
输出
如果在数组B中添加一个值,比如“3”,将得到“IndexError:索引3超出大小为2 '的轴0的界限。因为a的大小是2。
输出