通过指定行和列从另一个数组创建NumPy数组

时间:2014-10-21 18:28:36

标签: python arrays numpy

如何创建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 .....

3 个答案:

答案 0 :(得分:4)

执行此操作的最佳方法是使用ix_功能:有关详细信息,请参阅answer by MSeifert

或者,您可以使用xy链接索引操作:

>>> 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]