这两个numpy切片中哪一个更好用?

时间:2017-07-09 02:02:19

标签: python arrays numpy slice

我正在通过在线课程学习Python。我们被要求切割一个6x6的numpy阵列并得到对角线。作为一个小组,我们开发了两种方法,如下所示。这个比那个好吗?

import numpy as n
six = n.arange(1, 73, 2)
six.reshape(6,6)

发现解决方案

six[::7]
six.reshape(36)[::7]

我的回答都返回array([ 1, 15, 29, 43, 57, 71])

我喜欢第一个,我的伴侣喜欢第二个。任何帮助都将非常感激。

谢谢!

2 个答案:

答案 0 :(得分:2)

six

不会修改six本身:它只返回一个新的2D数组,但保持>>> six = np.arange(1, 73, 2) >>> six.reshape(6,6) >>> print(six) 不变。所以,你的两种方法实际上是同一种方法。

您可以通过执行以下操作进行验证:

[ 1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71]

您将获得一个像:

的一维数组
reshape

因此,我声明不使用不必要的 six调用(假设np.arange(1, 73, 2)是使用function plusDivs(n) { slideIndex += n; if(slideIndex >= x.length){slideIndex = x.length;} if(slideIndex <=1){slideIndex=1} showDivs(slideIndex += n); } 创建的平面数组)的答案是< strong>最佳答案:)

答案 1 :(得分:1)

让我们先修改你的代码,这样就可以达到你想要的目的:

six = np.arange(1, 73, 2).reshape(6, 6)

现在比较你的方法:

>>> six[::7]
array([[ 1,  3,  5,  7,  9, 11]])

致你的伴侣:

>>> six.reshape(36)[::7]
array([ 1, 15, 29, 43, 57, 71])