我想在numpy.ndarray中仅选择唯一的行(变量名为cluster)。当我像这样明确定义这个变量时:
在我的实际例子中,使用一个44*2的数组时,它添加了22行相同的行,但错过了其中的23行(方案也非常奇怪:它添加了索引为0、1、2、4、9、11、12、18等的行)。但是添加的相同行数目不同。 而且它只应该添加这44行中的第一行。
至于选择唯一行的方法,我首先使用了来自此线程Find unique rows in numpy.array的方法。
然后我尝试了我的代码来检查:
结果是相同的,我真的不知道为什么。 如果有任何帮助/建议/建议/想法,我将非常感激。
问题出在浮点数上。当我将数组的值舍入到小数点后7位时,一切都按预期工作。感谢Eelco Hoogendoorn提出这个想法。
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提出这个想法。
b
。它也是'numpy.ndarray'
类型,但是当我尝试打印它时,我看到了奇怪的符号,我不知道如何编码/解码它们:[��|гY�? 9��v���? � h"lx�? @ ��|гY�? 9��v���? � h"lx�? ��|гY�? 9��v���? � h"lx�? �K7�A
�? 9��v���? F����x�? ��|гY�? 9��v���? � h"lx�? @ ��|гY�? 9��v���? � h"lx�? ��|гY�? 9��v���? � h"lx�? @ @ @]` - Natalyxtrans[splitted_clusters]
生成的b
的形状和数据类型是什么?如果没有提供xtrans
的样本或者如何转换以产生新的b
的想法,我们无法调试您的问题。 - hpauljxtrans[i,:]==xtrans[j,:]
。或查看xtrans[i,:]-xtrans[j,:]
。这些行可能并不像您想象的那样独特。 - hpaulj