为什么numpy函数`take`改变了我的数组的形状?

时间:2016-05-04 22:34:15

标签: python arrays numpy matrix scipy

我正在尝试计算我的数据集中的哪些点(在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   返回的数组与。

的类型相同

我做错了什么?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

如果您从(20, 11)形状开始,我认为获得(20, 1, 11)形状的唯一方法是x形状为(1, 11)

尝试result = matrix_with_labels.take(x.reshape(-1), 0)