python判断列表维度_如何检查numpy数组的维数?

还有一个“隐藏维度”问题:

Numpy有一些性能驱动的技巧,如果不适当注意的话,可能会让您感到困惑:

有一些诀窍是np.view()创建的,将视图转换为“外部拥有的数据,这实际上意味着出现了隐藏共享的形式,如果已经在“return()-ed”image上执行了一些操作,那么将任何修改存储到一个刚刚创建的视图中,这可能会让您大吃一惊。在这种情况下,您的代码将无声地损坏“外部”-数据,因为您没有意识到或注意到,虽然>{}正确地报告了这两个数据,但它并没有“自己的数据,而只是通过一个“类似潜望镜的窗口”提供了原始数据的视图数据,仍然由其他人在某处拥有(这里,写入image,就像在一个示例性的image[0,0] = -1赋值中一样,实际上将“写入”-1,以将其存储到A-sA.data的“咽喉”,实际上是实际写存储操作的实现区,导致在A的数据中发生修改

)

.view()-s的这种副作用非常强大(如果有意使用,出于性能或其他原因),但也非常糟糕(如果在代码设计阶段没有检测到,只要“源”数据在不知情的情况下损坏,就可以跟踪魔鬼的尾巴)是谁把迄今为止清晰而合理的设计破坏了“外国的&安全拥有的”“-幕后的数据。。。检测这种隐藏的共享写通可能要花很长时间,而且确实要花很长时间。。。如果它们是在没有您的事先意图的情况下发生的)>>> A = np.arange( 3*640*480 ).reshape( 3, 640, 480 )

>>> A.shape

(3, 640, 480)

>>> A.ndim

3

>>> B = A.view() # ENFORCE B BECOME A VIEW() ON AN ARRAY

>>> B.shape # B MIMICS AN ARRAY, WHILE IT IS NOT AN ARRAY

(3, 640, 480)

>>> B.ndim # B MIMICS AN ARRAY, WHILE IT IS NOT AN ARRAY

3

>>> B.flags # B MIMICS AN ARRAY, WHILE IT IS NOT AN ARRAY

C_CONTIGUOUS : True

F_CONTIGUOUS : False

OWNDATA : False <------------------- a view() on array, not the array itself

WRITEABLE : True

ALIGNED : True

WRITEBACKIFCOPY : False

UPDATEIFCOPY : False

>>> image = B[0,:,:] # slice B into an IMAGE, which will still look as if it is an array

>>> image.flags

C_CONTIGUOUS : True

F_CONTIGUOUS : False

OWNDATA : False <----------------- a view() onto an array, not the array itself

WRITEABLE : True

ALIGNED : True

WRITEBACKIFCOPY : False

UPDATEIFCOPY : False

>>> image.ndim

2

>>> image.shape

(640, 480)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值