首页 > 解决方案 > 如何使用 `np.where()` 比较数组而不是单个值

问题描述

我有一个带有 3 个颜色通道的图像(二维数组)。像这样的东西:

[[[128 197 254]
  [128 197 254]
  [128 197 254]
  ...
  [182 244 255]
  [182 244 255]
  [182 244 255]]

 [[128 197 254]
  [128 197 254]
  [128 197 254]
  ...
  [182 244 255]
  [182 244 255]
  [182 244 255]]

 [[128 197 254]
  [128 197 254]
  [128 197 254]
  ...
  [182 244 255]
  [182 244 255]
  [182 244 255]]

 ...

 [[128 197 254]
  [128 197 254]
  [128 197 254]
  ...
  [182 244 255]
  [182 244 255]
  [182 244 255]]

 [[128 197 254]
  [128 197 254]
  [128 197 254]
  ...
  [182 244 255]
  [182 244 255]
  [182 244 255]]

 [[128 197 254]
  [128 197 254]
  [128 197 254]
  ...
  [182 244 255]
  [182 244 255]
  [182 244 255]]]

例如,我想获取 [255, 255, 255] 的颜色索引。我尝试使用np.where()or np.argwhere(),但它比较的是值而不是数组。最快和最有效的方法是什么?

标签: pythonpython-3.xnumpynumpy-ndarray

解决方案


IIUC,您可以使用np.nonzero

np.nonzero((arr==255).all(axis=2))

这将返回一个表示索引的数组元组。如果你这样做

arr[ind]

第一个 expr 的返回值在哪里ind,您可以访问/修改所有 255 的所有行。


推荐阅读