【问题标题】:How to use numpy.where with logical operators如何将 numpy.where 与逻辑运算符一起使用
【发布时间】:2012-11-27 17:10:18
【问题描述】:

我正在尝试查找数组中大于 a 但小于 b 的所有元素的索引。这可能只是我的语法有问题,但这不起作用:

numpy.where((my_array > a) and (my_array < b))

我应该如何解决这个问题?还是有更好的方法?

谢谢!

【问题讨论】:

  • 你试过像 & 代替 and 的逻辑运算符吗?
  • 只是用 & 代替 and 是行不通的,但我发现这行得通:numpy.where((my_array > a) & (my_array
  • @user1803782:你能解释一下用&amp; 替换and 不起作用有什么意义吗?这是解决这个问题的标准方法。
  • 我实际上不确定为什么它第一次出现错误。现在它确实有效。我的错。不过谢谢。

标签: python numpy where logical-operators


【解决方案1】:

这里有两种方法:

In [1]: my_array = arange(10)

In [2]: where((my_array > 3) & (my_array < 7))
Out[2]: (array([4, 5, 6]),)

In [3]: where(logical_and(my_array > 3, my_array < 7))
Out[3]: (array([4, 5, 6]),)

对于第一个(将and 替换为&amp;),请注意适当地添加括号:&amp; 的优先级高于比较运算符。你也可以使用*,但我不推荐它:它很hacky,不利于代码的可读性。

In [4]: where((my_array > 3) * (my_array < 7))
Out[4]: (array([4, 5, 6]),)

【讨论】:

  • “hacky”是什么意思?为什么它总是返回 "(array([4,5,6]),)" 而不是只返回 "array([4,5,6])" ? “没有第二个东西的元组”背后的想法是什么 - 返回的东西的语法?
  • @usethedeathstar:(1) hacky 位是主观的。我想我的问题是(至少对我而言)代码的表面阅读与意图并不明显匹配。 (2) 对于where,它返回一个元组,因为在一般情况下where 对两个n 维数组进行操作,并返回一个n 元组的结果;在这里,您会看到 n=1 的特殊情况。元组容器有点难看,但与高维情况不一致可能会更难看。 (耶!更多的主观性!)
  • 所以在这种情况下,我们得到一个一维数组,元组长 1 项,在二维情况下,你只得到一个“x-index”数组和一个“y-index”元组中的数组,显示 2D 数组中的点的 x,y 坐标,根据您所做的逻辑组成,这些点是好的?
  • @usethedeathstar:是的,没错。
  • 呸:上面的“对两个n维数组进行操作”应该是“对一个n维数组进行操作”。
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 2010-11-11
  • 2017-05-31
  • 1970-01-01
相关资源
最近更新 更多