如何在numpy中选择双数组的特定行和列以形成子矩阵?

如何在numpy中选择双数组的特定行和列以形成子矩阵?,numpy,Numpy,假设我有一个列表的基本列表: import numpy as np ab=np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,3,6]]) 现在假设我想要子矩阵,前两行,第1列和第3列,我会这样做 print(ab[0:2,[1,3]]) 现在,如果我想要第0行和第2行以及第1列和第3列,我会尝试: print(ab[np.array([0,2]),np.array([1,3])]) 但我得到: [3 6] 这是条目的明智搜索,而不是行和列的明智子矩阵 如何

假设我有一个列表的基本列表:

import numpy as np
ab=np.array([[1,2,3,4,5],[2,3,4,5,6],[3,4,5,3,6]])
现在假设我想要子矩阵,前两行,第1列和第3列,我会这样做

print(ab[0:2,[1,3]])
现在,如果我想要第0行和第2行以及第1列和第3列,我会尝试:

print(ab[np.array([0,2]),np.array([1,3])])
但我得到:

[3 6]
这是条目的明智搜索,而不是行和列的明智子矩阵


如何操作?

当您选择具有两个可广播索引数组的子数组时,如
array[arr\u 1,arr2]
,它将
arr\u 1
的每个元素与
arr\u 2
匹配,并选择
array
的相应元素。如果您希望选择
arr\u 1
中的所有行和
arr\u 2
中的所有列,最优雅的方法是使用
np.ix
。守则是:

ab[np.ix_(np.array([0,2]),np.array([1,3]))]
输出:

[[2 4]
 [4 3]]
关于
np.ix\uuu
:From:此函数接受N个一维序列,并返回N个输出,每个输出有N个维度,这样形状在除一维外的所有维度中都是1,具有非单位形状值的维度在所有N个维度中循环。


这意味着您可以将其扩展到任何维度数组。对于N维的
数组
,调用
np.ix(arr_1,arr_2,…,arr_N)
将创建N个索引数组,每个索引数组将在
数组
中的所有
arr_i
行中循环,在使用静态步骤选择行/列的情况下,您可以执行以下操作,
print(ab[0:3:2,1:4:2])