python – 对如何切割numpy数组感到困惑
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 对如何切割numpy数组感到困惑,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2075字,纯文字阅读大概需要3分钟。
内容图文
![python – 对如何切割numpy数组感到困惑](/upload/InfoBanner/zyjiaocheng/802/6471115a321a47b7b38c5b5febb39ad6.jpg)
m是一个有形状的ndarray(12,21,21),现在我只想把它的一个稀疏切片组成一个新的2D数组,
sliceid = 0
indx = np.array([0, 2, 4, 6, 8, 10])
所以sparse_slice直观地说是
sparse_slice = m[sliceid, indx, indx]
但显然上面的操作不起作用,目前我正在使用的是
sparse_slice = m[sliceid,indx,:][:, indx]
为什么第一个“直观”的方式不起作用?并且有一种比我目前的解决方案更紧凑的方式吗?我之前所有的ndarray切片试验都是基于直觉,也许我现在转而阅读一些严肃的手册……
解决方法:
更紧凑的方法是做new = m [0,:12:2,:12:2].这就是numpy docs所谓的“基本索引”,意味着你用整数或切片对象切片(即0:12:2).当您使用基本索引时,numpy返回原始数组的视图.例如:
In [3]: a = np.zeros((2, 3, 4))
In [4]: b = a[0, 1, ::2]
In [5]: b
Out[5]: array([ 0., 0.])
In [6]: b[:] = 7
In [7]: a
Out[7]:
array([[[ 0., 0., 0., 0.],
[ 7., 0., 7., 0.],
[ 0., 0., 0., 0.]],
[[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
在您的“直观”方法中,您正在做的是使用另一个数组索引数组.当您使用另一个数组索引numpy数组时,数组需要具有相同的大小(或者它们需要相互广播,在一秒内更多关于此).在文档中,这称为花式索引或高级索引.例如:
In [10]: a = np.arange(9).reshape(3,3)
In [11]: a
Out[11]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [12]: index = np.array([0,1,2])
In [13]: b = a[index, index]
In [14]: b
Out[14]: array([0, 4, 8])
你看到我得到[0,0],[1,1]和[2,2]而不是[0,0],[0,1] …如果你想要“外部产品“索引索引可以执行以下操作.
In [22]: index1 = np.array([[0,0],[1,1]])
In [23]: index2 = np.array([[0,1],[0,1]])
In [24]: b = a[index1, index2]
In [25]: b
Out[25]:
array([[0, 1],
[3, 4]])
上面有一个简写,如下所示:
In [28]: index = np.array([0,1])
In [29]: index1, index2 = np.ix_(index, index)
In [31]: index1
Out[31]:
array([[0],
[1]])
In [32]: index2
Out[32]: array([[0, 1]])
In [33]: a[index1, index2]
Out[33]:
array([[0, 1],
[3, 4]])
In [34]: a[np.ix_(index, index)]
Out[34]:
array([[0, 1],
[3, 4]])
你会注意到index1是(2,1),index2是(1,2),而不是(2,2).这是因为两个阵列相互广播,你可以阅读更多有关广播here的信息.请记住,当你使用花哨的索引时,你得到原始数据的副本而不是视图.有时这更好(如果你想保持原始数据不变),有时它只需要更多的内存.有关索引here的更多信息.
内容总结
以上是互联网集市为您收集整理的python – 对如何切割numpy数组感到困惑全部内容,希望文章能够帮你解决python – 对如何切割numpy数组感到困惑所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。