gpt4 book ai didi

python - 无法应用在 python 中的 numpy.ndarray 中查找唯一行的方法

转载 作者:行者123 更新时间:2023-11-28 16:26:10 25 4
gpt4 key购买 nike

我正在尝试仅选择 numpy.ndarray(名为 cluster 的变量)中的唯一行。当我像这里这样明确地定义这个变量时:

cluster=np.array([[0.157,-0.4778],[0.157,-0.4778],[0.157,-0.4778],[-0.06156924,-0.21786049],[-0.06156924,-0.21786049],[0.02,-0.35]])

它正常工作:

[[ 0.157      -0.4778    ]
[-0.06156924 -0.21786049]
[ 0.02 -0.35 ]]

但不幸的是,这个变量 cluster 是更大数组 (xtrans) 的一部分。所以只能通过数组切片来定义:

splitted_clusters=[0,1,4,5,10]

cluster=xtrans[splitted_clusters]

功能相同,数据类型相同。

但是!!!在后一种情况下,它的工作方式很奇怪:它可能会添加相同的行,也可能不会添加它们。 结果我有这样的东西:

    [[ 0.157      -0.4778    ]
[ 0.157 -0.4778 ]
[-0.06156924 -0.21786049]
[ 0.02 -0.35 ]]

在我的 真实示例 中,有一个 44*2 数组,它添加了 22 个相同的行,但遗漏了其中的 23 个(该方案也很奇怪:它添加了索引为 0,1,2 的行, 4、9、11、12、18 等)。但是添加的相同行数不同。并且它应该只添加这 44 行中的一个(第一行)。

至于首先选择唯一行的方法,我使用了这个线程中的一个 Find unique rows in numpy.array

b =np.ascontiguousarray(cluster).view(np.dtype((np.void, cluster.dtype.itemsize * cluster.shape[1])))
_, idx = np.unique(b, return_index=True)
unique_cl = cluster[idx]

然后我尝试了我的代码来检查:

unique_cl=np.array([0,0])
for i in range(cluster.shape[0]):
if i==0:
unique_cl=np.vstack([cluster[i,:]])
elif cluster[i,:].tolist() not in unique_cl.tolist():
unique_cl=np.vstack([unique_cl,cluster[i,:]])

结果是一样的,我真的不知道为什么。如果有任何帮助/建议/建议/想法,我将不胜感激。

问题出在花车上。当我将数组的值四舍五入到小数点后 7 位时,一切正常。感谢 Eelco Hoogendoorn 的这个想法。

最佳答案

您可以通过将 list 转换为 set 来实现。

 aList = [[ 0.157, -0.4778], [ 0.157, -0.4778],[-0.06156924,
-0.21786049], [ 0.02, -0.35]]
  1. 从列表的列表中创建一个元组的列表,否则你会not be able to create set or dictionary from it .
  2. Set 构造函数将为您完成休息

    set([tuple(a) for a in aList])

输出:

set([(-0.06156924, -0.21786049), (0.02, -0.35), (0.157, -0.4778)])

关于python - 无法应用在 python 中的 numpy.ndarray 中查找唯一行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36378202/

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