我正在通过在线课程学习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])
我喜欢第一个,我的伴侣喜欢第二个。任何帮助都将非常感激。
谢谢!
答案 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])