在1D数组numpy上从where子句创建2D数组

2024-06-12 02:27:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含整数值的一维数组:

a = np.array([1,2,3,3,2,2,3,2,3])
a
array([1, 2, 3, 3, 2, 2, 3, 2, 3])

我想创建一个二维数组,第一维保存一维数组中整数值的索引:

^{pr2}$

但这会返回一个列表(duh):

type(idx)
list

第一个维度是一系列元组:

type(idx[0])
tuple

如何使用where子句从1D数组返回一个2D numpy数组的值索引?在

编辑:

预期产量:

array([[0],[1,4,5,7],[2,3,6,8]])

Tags: numpy列表typenp整数数组wherearray
1条回答
网友
1楼 · 发布于 2024-06-12 02:27:56

最接近二维阵列的是:

In [147]: np.array(tuple(np.where(a == e)[0] for e in np.unique(a)))
Out[147]: 
array([array([ 0, 14, 15, 16]),
       array([ 1,  4,  5,  7,  9, 10, 11, 13, 17, 19, 21]),
       array([ 2,  3,  6,  8, 12, 18, 20])], dtype=object)

但它是一个或多个一维数组。在

问题的一部分是np.where返回数组的元组,这样无论数组有多少维,它都将具有相同的接口。因为你只有一个,所以你可以得到0指数。在

然后我建议使用np.unique,因为它有点好,但是它会跳过a中没有的索引。因此,如果这是非常重要的,那么就改回来,但使用range(a.max() + 1)

^{pr2}$

因为索引从0开始,而不是1。在

相关问题 更多 >