gpt4 book ai didi

python - 高效统计 NumPy 中唯一子数组的出现次数?

转载 作者:太空狗 更新时间:2023-10-29 21:07:06 43 4
gpt4 key购买 nike

我有一个形状为 (128, 36, 8) 的数组,我想找出最后一个维度中长度为 8 的唯一子数组的出现次数。

我知道 np.uniquenp.bincount,但它们似乎是针对元素而不是子数组。我看过this question但它是关于查找特定子数组的第一次出现,而不是所有唯一子数组的计数。

最佳答案

问题指出输入数组的形状为 (128, 36, 8),我们有兴趣在最后一个维度中找到长度为 8 的唯一子数组。所以,我假设唯一性是沿着前两个维度合并在一起的。让我们假设 A 作为输入 3D 数组。

获取唯一子数组的个数

# Reshape the 3D array to a 2D array merging the first two dimensions
Ar = A.reshape(-1,A.shape[2])

# Perform lex sort and get the sorted indices and xy pairs
sorted_idx = np.lexsort(Ar.T)
sorted_Ar = Ar[sorted_idx,:]

# Get the count of rows that have at least one TRUE value
# indicating presence of unique subarray there
unq_out = np.any(np.diff(sorted_Ar,axis=0),1).sum()+1

sample 运行-

In [159]: A # A is (2,2,3)
Out[159]:
array([[[0, 0, 0],
[0, 0, 2]],

[[0, 0, 2],
[2, 0, 1]]])

In [160]: unq_out
Out[160]: 3

获取唯一子数组的出现次数

# Reshape the 3D array to a 2D array merging the first two dimensions
Ar = A.reshape(-1,A.shape[2])

# Perform lex sort and get the sorted indices and xy pairs
sorted_idx = np.lexsort(Ar.T)
sorted_Ar = Ar[sorted_idx,:]

# Get IDs for each element based on their uniqueness
id = np.append([0],np.any(np.diff(sorted_Ar,axis=0),1).cumsum())

# Get counts for each ID as the final output
unq_count = np.bincount(id)

sample 运行-

In [64]: A
Out[64]:
array([[[0, 0, 2],
[1, 1, 1]],

[[1, 1, 1],
[1, 2, 0]]])

In [65]: unq_count
Out[65]: array([1, 2, 1], dtype=int64)

关于python - 高效统计 NumPy 中唯一子数组的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30879446/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com