【问题标题】:Operate on multiple indices for numpy array using relational operators element wise使用关系运算符元素对 numpy 数组的多个索引进行操作
【发布时间】:2019-10-31 18:20:16
【问题描述】:

我知道我可以在我的数组上使用关系运算符来获取一个新的布尔值数组。下面的示例生成一个布尔数组,其形状与原始数组相同,但如果同一索引处的项目大于 0,则其值为 True,否则为 False

>>> a = np. array ([ [0 , -2 ,5] , [ -1 , -8 , -12] ,[2 , 4, -9] ])
>>> z = a > 0
>>> print (a)
[[ 0 2 5]
[ 1 -8 -12]
[ 2 4 -9]]
>>> print (z)
[[ False True True ]
[ True False False ]
[ True True False ]]

我想知道是否有一种方法可以同时比较多个索引以检查两个或多个值是否大于 0。例如,检查每一行以查看第一个元素和第二个元素是否为大于 0。看起来不像

z = a[:,0] > 0 and a[:,1] > 0

会产生结果

array([False, False,  True])

因为 a[0,1] = True 但 a[0,0] = False,a[1,0] = True 但 a[0,1] = False,a[2,0] 和 a [0,2] 为 True,因此第一行返回 False,第二行返回 False,第三行返回 True


我想在没有循环的情况下完成所有这些

【问题讨论】:

  • np.logical_and(a[:, 0] > 0, a[:, 1] > 0)?
  • (a[:,0]>0) & (a[:,1]>0) - 将比较与() 分组并与元素&(或|)组合。

标签: python arrays numpy


【解决方案1】:

只需使用logical_and

它将明智地计算“逻辑 &”元素。

np.logical_and(a[:,0] > 0, a[:,1] > 0)

【讨论】:

  • 谢谢!我意识到我的问题的标题不是很清楚,你能想出一个更好的标题吗?更具描述性?
【解决方案2】:

不完全是一个循环:

[b[0] > 0 and b[1] > 0 for b in a]

【讨论】:

  • 但非常接近 - for b in a 是一个迭代。
猜你喜欢
  • 2018-12-09
  • 2023-03-14
  • 2012-03-25
  • 2018-02-03
  • 2018-12-08
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多