gpt4 book ai didi

python - 查找唯一列和列成员

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:55 25 4
gpt4 key购买 nike

我经历了这些线程:

他们都讨论了几种计算具有唯一行和列的矩阵的方法。

但是,这些解决方案看起来有点复杂,至少对于未经训练的人来说是这样。例如,这是第一个线程的最佳解决方案,(如果我错了请纠正我)我认为它是最安全和最快的:

np.unique(a.view(np.dtype((np.void, a.dtype.itemsize*a.shape[1])))).view(a.dtype).reshape(-1, 
a.shape[1])

无论哪种方式,上述解决方案仅返回唯一行的矩阵。我正在寻找的是 np.unique

的原始功能
u, indices = np.unique(a, return_inverse=True)

它不仅返回唯一条目的列表,还返回找到的每个唯一条目的每个项目的成员资格,但我如何才能对列执行此操作?

这是我正在寻找的示例:

array([[0, 2, 0, 2, 2, 0, 2, 1, 1, 2],
[0, 1, 0, 1, 1, 1, 2, 2, 2, 2]])

我们会:

u       = array([0,1,2,3,4])
indices = array([0,1,0,1,1,3,4,4,3])

u 中的不同值表示原始数组中的一组唯一列:

0 -> [0,0]
1 -> [2,1]
2 -> [0,1]
3 -> [2,2]
4 -> [1,2]

最佳答案

首先让我们获取唯一索引,为此我们需要从转置您的数组开始:

>>> a=a.T

使用上述的修改版本来获取唯一索引。

>>> ua, uind = np.unique(np.ascontiguousarray(a).view(np.dtype((np.void,a.dtype.itemsize * a.shape[1]))),return_inverse=True)

>>> uind
array([0, 3, 0, 3, 3, 1, 4, 2, 2, 4])

#Thanks to @Jamie
>>> ua = ua.view(a.dtype).reshape(ua.shape + (-1,))
>>> ua
array([[0, 0],
[0, 1],
[1, 2],
[2, 1],
[2, 2]])

为了理智:

>>> np.all(a==ua[uind])
True

重现您的图表:

>>> for x in range(ua.shape[0]):
... print x,'->',ua[x]
...
0 -> [0 0]
1 -> [0 1]
2 -> [1 2]
3 -> [2 1]
4 -> [2 2]

完全按照你的要求去做,但如果它必须转换数组会慢一点:

>>> b=np.asfortranarray(a).view(np.dtype((np.void,a.dtype.itemsize * a.shape[0])))
>>> ua,uind=np.unique(b,return_inverse=True)
>>> uind
array([0, 3, 0, 3, 3, 1, 4, 2, 2, 4])
>>> ua.view(a.dtype).reshape(ua.shape+(-1,),order='F')
array([[0, 0, 1, 2, 2],
[0, 1, 2, 1, 2]])

#To return this in the previous order.
>>> ua.view(a.dtype).reshape(ua.shape + (-1,))

关于python - 查找唯一列和列成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197071/

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