Python numpy数组中小于(<;)运算符的作用是什么?

Python numpy数组中小于(<;)运算符的作用是什么?,python,numpy,Python,Numpy,我现在正在学习Python,我在互联网上找到了这行代码。我不明白这行代码实际上是做什么的 假设我有这个数组: import numpy as np x = np.array ([[1,5],[8,1],[10,0.5]] y = x[np.sqrt(x[:,0]**2+x[:,1]**2) < 1] print (y) 将numpy导入为np x=np.array([[1,5],[8,1],[10,0.5]] y=x[np.sqrt(x[:,0]**2+x[:,1]**2)

我现在正在学习Python,我在互联网上找到了这行代码。我不明白这行代码实际上是做什么的

假设我有这个数组:

import numpy as np
x = np.array ([[1,5],[8,1],[10,0.5]]
y = x[np.sqrt(x[:,0]**2+x[:,1]**2) < 1]
print (y)
将numpy导入为np
x=np.array([[1,5],[8,1],[10,0.5]]
y=x[np.sqrt(x[:,0]**2+x[:,1]**2)<1]
打印(y)
结果是一个空数组。我想知道的是y实际上是做什么的?我以前从未遇到过这种代码。方括号好像是if条件语句。if编写这行代码,而不是该代码:

import numpy as np
x = np.array ([[1,5],[8,1],[10,0.5]]
y = x[0 < 1]
print (y)
将numpy导入为np
x=np.array([[1,5],[8,1],[10,0.5]]
y=x[0<1]
打印(y)
它将返回x的精确值(因为0小于1)。
假设这是一种编写if条件语句的方法,我发现它非常荒谬,因为我将数组与整数进行比较。
感谢您的回答!

在Numpy:

[1,1,2,3,4]<2

大致相当于:


使用
布尔值
整数
对数组进行切片时,[x
numpy
的工作方式不同

从:

当obj是布尔类型的数组对象(例如可能从比较运算符返回的对象)时,会发生此高级索引 布尔索引数组实际上与x完全相同[obj.nonzero()] 其中,如上所述,obj.nonzero()返回一个元组(长度为 ndim)的整数索引数组,显示obj的真实元素。 但是,当obj.shape==x.shape时,速度更快

如果obj.ndim==x.ndim,则x[obj]返回一个填充的一维数组 x的元素对应于obj的真值 搜索顺序将是行主键,C样式。如果obj在 如果条目超出x的界限,则会出现索引错误 如果obj小于x,则与填充相同 错

使用布尔值对数组进行索引时,您告诉
numpy
选择与
True
对应的数据,因此
array[True]
array[1]不同
。在第一种情况下,
numpy
将因此将其解释为零维布尔数组,该数组基于掩码的工作方式,与选择所有数据相同

因此:

x[True]

将返回完整数组,就像

x[False]


将返回一个空数组。

我怀疑
0<1
返回一个
bool
,然后该bool求值为
int
,因此得到数组的第一个或第二个元素。@TheIncorrigible1
x[1]!=x[True]
@TheIncorrigible1但我们不是在讨论列表。顺便说一句,我在文档中找不到关于使用标量进行布尔索引的内容。
x[True]
似乎是
x[[True,True,True],:]
@jdehesa Python的原生bool()实际上是int()的一个不稳定的子类使用一些特殊属性,值为0和1表示False/True。例如,您自己试试:True+True+True==3。这并不能完全回答这个问题。OP不是用布尔数组进行索引。它们是用
True
进行索引的。很公平-OP基本上问了两个独立的、基本上独立的问题,我认为这是指他对于比较数组和标量,而不是布尔索引的广播行为,人们大多感到困惑。
arr = [1,1,2,3,4]
res = arr[arr<2]

# evaluates to:
=> [1,1]