我在numpy
相当新的,我有一个很难理解如何从np.array
提取与定义的列和行的子矩阵:NumPy的提取小矩阵
Y = np.arange(16).reshape(4,4)
如果我想提取列/第0行和第3行,我应该有:
[[0 3]
[12 15]]
我尝试了所有的重塑功能......但无法弄清楚如何做到这一点。有任何想法吗?
我在numpy
相当新的,我有一个很难理解如何从np.array
提取与定义的列和行的子矩阵:NumPy的提取小矩阵
Y = np.arange(16).reshape(4,4)
如果我想提取列/第0行和第3行,我应该有:
[[0 3]
[12 15]]
我尝试了所有的重塑功能......但无法弄清楚如何做到这一点。有任何想法吗?
给np.ix_
一试:
Y[np.ix_([0,3],[0,3])]
这将返回您期望的结果:
In [25]: Y = np.arange(16).reshape(4,4)
In [26]: Y[np.ix_([0,3],[0,3])]
Out[26]:
array([[ 0, 3],
[12, 15]])
是的这就是它! – user1595929
@ user1595929如果您认为这是最佳解决方案并正确回答您的原始问题,请将其视为已接受。 – JoshAdel
一种解决方案是指数切片/迈进的行/列。在这里你是提取第一每三列/行到最后一列的例子(即第一和第四列)
In [1]: import numpy as np
In [2]: Y = np.arange(16).reshape(4, 4)
In [3]: Y[0:4:3, 0:4:3]
Out[1]: array([[ 0, 3],
[12, 15]])
这给了你,你要找的输出。
欲了解更多信息,请查看this page on indexing in NumPy
。
我喜欢这个答案,因为符号与matlab的符号相似 –
首先,您的Y
只有4列和行,所以没有col4或row4,至多col3或row3。
要获得0,3的cols:Y[[0,3],:]
要得到0,3行:Y[:,[0,3]]
因此,要获得您所请求的数组:Y[[0,3],:][:,[0,3]]
需要注意的是,如果你只是Y[[0,3],[0,3]]
它相当于[Y[0,0], Y[3,3]]
和结果将是两个要素:array([ 0, 15])
你也可以做到这一点使用:
Y[[[0],[3]],[0,3]]
这相当于做这个使用索引阵列:
idx = np.array((0,3)).reshape(2,1)
Y[idx,idx.T]
为了使广播工作根据需要,你需要你的索引阵列的非单维度与你进行索引轴线对齐,例如对于n×m个二维子阵列:
Y[<n x 1 array>,<1 x m array>]
这并不创建中间阵列,不象CT诸的回答,它创建中间阵列Y[(0,3),:]
,然后进入它的索引。
print y[0:4:3,0:4:3]
是最短和最合适的修复方法。
只是为了澄清,你所要求的是你想要的输出是列/行0和3 – JoshAdel