如果这个问题措辞不当,我很抱歉,因为我不确定如何简明扼要地描述我在做什么。
我有一个多维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维的,所以我需要一个通用的解决方案。
答案 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] ...