如何以矢量化方式在特定轴上查找二维数组的唯一向量?



我有一个形状数组(n,t)我想将其视为n-vectors的时间序列。

我想知道沿t-dimension存在的唯一n-vector值以及每个唯一向量的相关t-indices。 我很乐意使用任何合理的平等定义(例如numpy.unique将乘坐花车)

这很容易通过 Python 循环t但我希望采用矢量化方法。

在某些特殊情况下,可以通过将n-vectors折叠为标量(并在 1d 结果上使用numpy.unique)来完成,例如,如果您有布尔值,您可以使用矢量化dot(2**k)向量将(布尔向量)转换为整数,但我正在寻找一个相当通用的解决方案。

如果数组的形状是 (t, n) - 因此每个 n 向量的数据在内存中是连续的 - 您可以将二维数组的视图创建为一维结构化数组,然后在此视图上使用 numpy.unique。

如果您可以更改阵列的存储约定,或者您不介意复制转置的阵列,这可能对您有用。

下面是一个示例:

import numpy as np
# Demo data.
x = np.array([[1,2,3],
[2,0,0],
[1,2,3],
[3,2,2],
[2,0,0],
[2,1,2],
[3,2,1],
[2,0,0]])
# View each row as a structure, with field names 'a', 'b' and 'c'.
dt = np.dtype([('a', x.dtype), ('b', x.dtype), ('c', x.dtype)])
y = x.view(dtype=dt).squeeze()
# Now np.unique can be used.  See the `unique` docstring for
# a description of the options.  You might not need `idx` or `inv`.
u, idx, inv = np.unique(y, return_index=True, return_inverse=True)
print("Unique vectors")
print(u)

相关内容

  • 没有找到相关文章

最新更新