numpy数组中小于(<)运算符的功能是什么?

时间:2019-01-10 14:57:48

标签: 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)

结果是一个空数组。我想知道的是 y 的实际作用是什么?我以前从未遇到过这种代码。似乎方括号就像 if-conditional 语句。如果不编写该代码,请编写以下代码:

import numpy as np
x = np.array ([[1,5],[8,1],[10,0.5]]
y = x[0 < 1]
print (y)

它将准确返回 x 是什么(因为零IS小于一)。
假设这是一种编写 if-conditional 语句的方法,我发现它真的很荒谬,因为我正在将一个数组与一个整数进行比较。
谢谢您的回答!

2 个答案:

答案 0 :(得分:2)

脾气暴躁:

  

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

(大致)等同于:

  

[x <2对于[1,1,2,3,4]中的x]

用于香草Python列表。因此,在两种情况下,结果都是:

  

[真,真,假,假,假]

其他一些函数也是如此,例如加法,乘法等。广播实际上是Numpy的主要卖点。

现在,您可以在Numpy中执行的另一件事是布尔索引,该索引提供了一系列布尔值,这些布尔值被解释为“是否保持此值Y / N?”。所以:

arr = [1,1,2,3,4]
res = arr[arr<2]

# evaluates to:
=> [1,1] 

答案 1 :(得分:0)

numpy在使用booleanint分割数组时的工作原理有所不同。

来自docs

  

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

     

如果obj.ndim == x.ndim,则x [obj]返回填充的一维数组   x的元素对应于obj的True值。的   搜索顺序将是行优先的C样式。如果obj在以下位置具有True值   超出x范围的条目,则索引错误将   被提高。如果obj小于x,则等同于用填充   错误的。

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

因此:

x[True]

将返回完整数组,就像

x[False]

将返回一个空数组。