我正在尝试计算我的数据集中的哪些点(在numpy数组的形状中称为"矩阵")最接近向量(数组称为" vector")in n维空间。然后,我想从一个与"矩阵"相同的数据集中提取这些相同的向量。但包括其他标签(=" matrix_with_labels")。
vector=([1,2,3,...])
matrix=[[1,2,3,...], [2,4,6,...], ...]]
matrix_with_labels=[[a,1,2,3,...], [b,2,4,6,...], ...]]
因此,我计算了向量与矩阵中每个项目之间的距离:
dist=scipy.spatial.distance.cdist(matrix,vector,'euclidean')
然后我对这些距离进行排序以确定最近的邻居:
sorted_index=np.argsort(dist, axis=0)
然后我尝试排序" matrix_with_labels"通过" sorted_index",使用this post中所解释的numpy.take
。
result= matrix_with_labels.take(sorted_index, 0)
结果看起来很好,直到我尝试进一步处理它 - 它似乎改变了形状:
print result.shape
(20, 1, 11)
当我查看初始" matrix_with_labels"的形状时,然而:
matrix_with_labels.shape
(20, 11)
take上的文档说:
子阵列:ndarray 返回的数组与。
的类型相同
我做错了什么?任何帮助表示赞赏!
答案 0 :(得分:1)
如果您从(20, 11)
形状开始,我认为获得(20, 1, 11)
形状的唯一方法是x
形状为(1, 11)
。
尝试result = matrix_with_labels.take(x.reshape(-1), 0)
。