您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – Numpy:通过切片查看vs复制

5b51 2022/1/14 8:22:15 python 字数 1586 阅读 525 来源 www.jb51.cc/python

当我正在进行切片时,发生了意想不到的事情,这似乎是第一个被查看但第二个是复制. 第一 第一片行,然后是片段.这似乎是一种观点. >>> a = np.arange(12).reshape(3, 4) >>> a[0:3:2, :][:, [0, 2]] = 100 >>> a array([[100, 1, 100, 3], [ 4, 5, 6, 7],

概述

第一

第一片行,然后是片段.这似乎是一种观点.

>>> a = np.arange(12).reshape(3,4)   
>>> a[0:3:2,:][:,[0,2]] = 100
>>> a
array([[100,1,100,3],[  4,5,6,7],[100,9,11]])

第二

但是,如果我第一次切片,然后切片行,它似乎是一个副本:

>>> a[:,2]][0:3:2,:] = 0
>>> a
array([[100,11]])

我很困惑,因为这两种方法最终会导致看似位置改变,但为什么第二种方法实际上不会改变数字?

A1 A2 A3
B1 B2 B3
C1 C2 C3

认情况下,它以这种方式存储在内存中:

A1 A2 A3 B1 B2 B3 C1 C2 C3

所以如果你想选择每一行,那就是:

[A1 A2 A3] B1 B2 B3 [C1 C2 C3]

这可以描述为{start:0,size:3,stride:6}.

但是如果你想选择每一个第二列:

[A1] A2 [A3 B1] B2 [B3 C1] C2 [C3]

并且无法使用单个开始,大小和步幅来描述.所以没有办法构建这样的视图.

如果您希望能够查看每个第二列而不是每隔一行,则可以使用列主要的Fortran命令构建数组:

np.array(a,order='F')

然后它将被存储为:

A1 B1 C1 A2 B2 C2 A3 B3 C3

总结

以上是编程之家为你收集整理的python – Numpy:通过切片查看vs复制全部内容,希望文章能够帮你解决python – Numpy:通过切片查看vs复制所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶