【问题标题】:"Less/greater than" comparison of N-dimensional and (N-k)-dimensional numpy arraysN维和(N-k)维numpy数组的“小于/大于”比较
【发布时间】:2016-01-05 18:11:10
【问题描述】:

给定两个数组 a=np.array([[1, 3], [3, 4]])b=np.array([2, 2])

目标:通过a>b等操作得到数组np.array([False, True])。 IE。比较行(True,如果每对元素满足 > 运算符,否则为 False)而不是逐元素比较(即我想要得到 np.array([[False, True], [True, True]]))。

对于 3-D 和(可选)N 维数组也类似。 例如。

a1 = np.array([[[1, 2, 1], [2, 3, 2]], [[3, 4, 3], [4, 3, 4]]])
b1 = np.array([1, 1, 1])

a1 > b1这样的操作必须返回np.array([[False, True], [True, True]])

怎么做?

【问题讨论】:

  • 那些总是整数数组吗?
  • 我看不到基于元素类型的比较限制。所以所有可比较的(通过 numpy 的)类型都是允许的。

标签: python arrays python-3.x numpy compare


【解决方案1】:

找到解决办法:另外使用numpy.all函数。

我的例子的用法:

a=np.array([[1, 3], [3, 4]])
b=np.array([2, 2])
numpy.all(a > b, axis=1)

结果:

array([False,  True], dtype=bool)

a1 = np.array([[[1, 2, 1], [2, 3, 2]], [[3, 4, 3], [4, 3, 4]]])
b1 = np.array([1, 1, 1])
numpy.all(a1 > b1, axis=2)

结果:

array([[False,  True],
       [ True,  True]], dtype=bool)

numpy.all 还允许传递多个轴(作为整数的元组),因此它可以用于任何维度。

numpy 还允许使用 numpy 数组的 ndarray.all 方法。那么例子可以分别改写为(a>b).all(axis=1)(a1>b1).all(axis=2)

【讨论】:

  • (A>B).all(axis=-1) 将是任何 Ndarray 的通用方式,只要减少沿最后一个轴。
猜你喜欢
  • 2020-09-10
  • 2014-04-17
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多