为什么我无法计算两个 numpy 数组之间的距离?

Why I can not calculate distance between two numpy array?

1.I 有两个 numpy 数组,分别是 data_test 和 data_train

    data_partial_test = data_test[:2000,:]
    test_lable = label_test
    print(test_lable.shape)
    print(data_partial_test[0].shape)
    print(data_train[0].shape)
    dis = (( data_partial_test- data_train[:21000,])**2).sum(axis=1)

2.The data_test 的形状是 (21000,784) 而 data_train 的形状是 (2000,784)。当我 运行 这段代码时,它说:操作数不能与形状一起广播 (2000,784) (21000,784)

当你执行数组减法时,比如arr_1 - arr_2, 然后实际上 Numpy 次尝试:

  • arr_20行的元素中减去对应的元素 arr_1 的(也在 0 行),
  • 1,
  • 相同
  • 以此类推,直到两个数组的末尾。

只要两个数组的行数相同,该方案就有效 和列。

此规则有 3 个例外情况:

  • 其中一个数组可以有一个单行。那么这一行是 broadcast(重复)所以这个数组在概念上有很多 根据需要行。
  • 涉及的数组之一可以有一个单列。然后 上面提到的广播沿着 .
  • 进行
  • 其中一个操作数是单值。然后它被“扩展”成一个数组 与其他操作数(数组)中的行数/列数相同。

Numpy 中阅读有关广播的内容,以更详细地了解这一点。

在您的情况下,上述情况均未发生。 两个数组的列数相同,但行数是 不同。 后果就是上面的广播不能进行,整个 操作失败。

可能的解决方案

也许第一个数组中的每一行(行数较少)可以是 与第二个数组中的一行“配对”,例如基于一些关键领域。 这样的操作可以在Pandas中进行。请参阅 Pandas.

中的 join 方法

那么您可以:

  • 将您的两个 Numpy 数组转换为 pandasonic DataFrames,
  • 对这些 DataFrames 执行 join(基于公共键,通常 设置为每个 DataFrame 中的索引),
  • 计算适当的列对之间的差异。

那么您可以:

  • 平方这些差异,
  • 总结一下,
  • 最后计算和的根,得到想要的距离。