numpy在矩阵中获取行索引

时间:2018-02-21 00:51:32

标签: python numpy

如果这个问题措辞不当,我很抱歉,因为我不确定如何简明扼要地描述我在做什么。

我有一个多维numpy数组,其中较高维度是唯一标识符,较低维度是唯一结果。在典型情况下,每个结果都是一个向量,但结果本身也可以是更高维度。我希望能够检索将返回每个结果的唯一索引。我需要索引的原因是我需要能够查找结果,然后将其与其他一些不同分辨率的数据一起加入。所以我需要能够遍历每个值,然后添加附加信息并返回组合结果。请注意,我最终需要能够根据一些用户定义的函数(沿着np.argwhere的行)过滤这些独特的测量。现在我只想解决获取所有行的简单问题。这是一个简单的例子,我减少了尺寸。

在此示例中,每行代表测量结果。所以有6个结果,每个结果是2个元素向量:

a = np.arange(12).reshape(6,2)

我想要的是访问每一行的索引列表。所以我想要一些可以生成以下列表的代码:

row_indices = [0,1,2,3,4,5]

然后我可以轻松地访问每一行:

for row_idx in row_indices:
    row = a[row_idx]

请注意,我不希望硬编码方法获取2d矩阵的行索引。我的索引是至少3维的,所以我需要一个通用的解决方案。

1 个答案:

答案 0 :(得分:0)

在我刚刚回答的另一个问题中我使用了

In [11]: my_array = np.array(range(81)).reshape((3,3,3,3))

您的描述并不完全清楚,但听起来您想要迭代其中的几个维度。

实现此目的的一种方法是在ndindex

的帮助下
In [16]: list(np.ndindex(3,3))
Out[16]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
In [17]: for idx in np.ndindex(3,3):
    ...:     print(my_array[idx])
    ...:     
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 9 10 11]
 [12 13 14]
 [15 16 17]]
[[18 19 20]
...
 [78 79 80]]

我可以通过重塑进行相同的迭代:

In [18]: arr1 = my_array.reshape(9,3,3)
In [19]: for a in arr1:
    ...:     print(a)
    ...:     
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 9 10 11]
 [12 13 14]
 [15 16 17]]
[[18 19 20]
 [21 22 23]
 [24 25 26]]
...

for i in range(9): arr1[i] ...