在NumPy数组中将值转换为行索引

4

我有一个数组,其中第一行是类别,第二行是子类别,第三行是我想要压缩的值。

我正在尝试重新排列数组A。

[[ 4  4 19 19 20 21 25 26 26 27 27 29]  # category
 [ 1  2  1  2  1  2  1  1  2  1  2  2]  # subcategory
 [ 1  1  3  3  1  2  1  1  1  2  2  2]] # count

转换为数组B

[[ 4 19 20 21 25 26 27 29]  # category
 [ 1  3  1  0  1  1  2  0]  # subcategory 1 count
 [ 1  3  0  2  0  1  2  2]] # subcategory 2 count

我到这里就到了这里

categories, subcategories = np.unique(A[0], return_counts=True)
B = np.zeros((np.amax(subcategories) + 1, A[0].size))
B[0] = categories

但是不确定如何填充其余部分。有什么想法吗?
2个回答

1
这应该能解决问题:
cat_index = np.searchsorted(categories, A[0])
B[A[1], cat_index] = A[2]

1
这应该可以在输入未排序的情况下正常工作:
import numpy as np

A = np.array(
    [[ 4, 4,19,19,20,21,25,26,26,27,27,29],  # category
     [ 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2],  # subcategory
     [ 1, 1, 3, 3, 1, 2, 1, 1, 1, 2, 2, 2]]) # count

values, inverse = np.unique(A[0], return_inverse=True)

B = np.zeros((3, len(values)))
B[0] = values
B[1,inverse[A[1] == 1]] = A[2,A[1] == 1]
B[2,inverse[A[1] == 2]] = A[2,A[1] == 2]

Which gives:

[[ 4 19 20 21 25 26 27 29]
 [ 1  3  1  0  1  1  2  0]
 [ 1  3  0  2  0  1  2  2]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接