如何创建NumPy数组B
,它是NumPy数组A
的子数组,通过指定哪些行和列(由x
和{{1}表示分别)被包括在内?
例如:
y
应该给出输出:
A = numpy.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]])
x = [0, 2]
y = [1, 3, 4]
B = # Do something .....
答案 0 :(得分:4)
执行此操作的最佳方法是使用ix_
功能:有关详细信息,请参阅answer by MSeifert。
或者,您可以使用x
和y
链接索引操作:
>>> A[x][:,y]
array([[ 2, 4, 5],
[12, 14, 15]])
首先x
用于选择A
的行。接下来,[:,y]
选出由y
元素指定的子数组的列。
在这种情况下,链接是对称的:如果您愿意,也可以先使用A[:,y][x]
选择列。
答案 1 :(得分:1)
您可以使用允许广播整数索引数组的np.ix_
:
>>> A = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]])
>>> x = [0, 2]
>>> y = [1, 3, 4]
>>> A[np.ix_(x, y)]
array([[ 2, 4, 5],
[12, 14, 15]])
从文档中ix_
函数设计如此
[...]可以快速构建索引数组,索引数组。
a[np.ix_([1,3],[2,5])]
返回数组[[a[1,2] a[1,5]], [a[3,2] a[3,5]]]
。
答案 2 :(得分:0)
这是获得你想要的超级详细的方法:
import numpy as np
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]])
x = [0, 2]
y = [1,3,4]
a2 = a.tolist()
a3 = [[l for k,l in enumerate(j) if k in y] for i,j in enumerate(a2) if i in x]
b = np.array(a3)
但请关注@ajcr回答:
import numpy as np
a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]])
x = [0, 2]
y = [1,3,4]
a[x][:,y]