我想在函数中做这样的事情:
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数组。我无法定义检查条件。我真的被困在这一点上。有人可以帮忙吗?
答案 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,出于性能或其他原因使用它,并希望您永远不必回溯生产中隐藏的共享副作用。