如何检查numpy数组的尺寸?

时间:2017-09-07 16:22:33

标签: python image numpy

我想在函数中做这样的事情:

if image.shape == 2 dimensions
    return image # this image is grayscale
else if image.shape = 3 dimensions
    return image # image is either RGB or YCbCr colorspace

这里,图像是一个numpy数组。我无法定义检查条件。我真的被困在这一点上。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

numpy.array.shape是数组维度的元组。您可以计算元组的长度,这将给出维数。

if len(image.shape) == 2:
    return image # this image is grayscale
elif len(image.shape) == 3:
    return image # image is either RGB or YCbCr colorspace

Numpy数组也有ndim属性。

if image.ndim == 2:
    return image # this image is grayscale
elif image.ndim == 3:
    return image # image is either RGB or YCbCr colorspace

答案 1 :(得分:0)

问题不止一个“ 隐藏维度”:

Numpy有一些以性能为动机的技巧,如果没有适当注意,可能会使您感到困惑

np.view() 创建了一些技巧,作为 视图 到“ 外国”中拥有的数据,实际上意味着已经出现了隐藏的共享形式,如果对已经“ return() -ed” image将所有修改存储到刚刚.view()创建的视图中。在这种情况下,您的代码将无声地破坏“ 外国 ”数据,因为您没有意识到或注意到 image 正确报告了两个image.{shape|ndim},但它没有“ 拥有 ”自己的数据,仅通过“潜望镜类似窗口”提供了一个视图进入原始数据,仍然被其他人“ 拥有 ”(这里是写入image,就像在 { {1}} 实际上会“ 直写 image[0,0] = -1 ,以将其存储在“ 喉咙”中 -1 -s A中的“”,实际上是实际写存储操作的A.data实现者​​区域,导致在 { {1}} 的数据  )

<read-write buffer for 0x7efe9ff73800, size 7372800, offset 0 at 0x7efe9ff6cbf0> -s的这种副作用既非常强大(如果出于性能或其他原因在有意的情况下使用),也非常非常强大。 令人敬畏的来检测/调试(如果在代码设计阶段未检测到,并且一旦“ source ”数据遭到破坏,就只是追捕魔鬼的尾巴,不知道是谁这么做了)清晰清晰的设计残骸破坏了窗帘后面的“ 外国 安全拥有的 ”数据。 。可能要花很长时间才能检测到这种隐藏的共享写透...如果它们没有您的事先意图就发生

A

希望您会喜欢 .view() -s,出于性能或其他原因使用它,并希望您永远不必回溯生产中隐藏的共享副作用。