问题描述
1。我有两个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。data_test的形状为(21000,784),而data_train的形状为(2000,784)。当我运行此代码时,它说:操作数不能与形状一起广播(2000,784)(21000,784)
解决方法
当您执行数组减法时,例如 arr_1-arr_2 , 然后实际上是 Numpy 尝试:
- 从相应元素中减去 arr_2 中第 0 行的元素 的 arr_1 (也在行 0 中),
- 与第 1 行相同,
- 依次类推,直到两个数组的末尾。
只要两个数组的行数相同,此方案就可以使用 和列。
此规则有3个例外:
- 涉及的数组之一可以有一个单行。然后这行是 广播(重复),以便此数组在概念上具有尽可能多的 行。
- 所涉及的数组之一可以具有单列。然后 上面提到的广播是沿着列进行的。
- 操作数之一是单个值。然后将其“扩展”为数组 与其他操作数(数组)中的行/列数相同。
阅读有关 Numpy 中广播的信息,以对此有更详细的了解。
在您的情况下,不会发生上述情况。 两个数组的列数相同,但行数为 不同。 结果是无法执行上述广播,并且整个 操作失败。
可能的解决方案
也许第一个数组中的每一行(行数较少)可以是 与第二个阵列中的一行“配对”,例如基于一些关键领域。 可以在 Pandas 中执行此操作。请参阅 Pandas 中的 join 方法。
然后您可以:
- 将两个 Numpy 数组都转换为 pandasonic DataFrames,
- 在这些DataFrame上执行 join (通常基于公共密钥 设置为每个DataFrame中的索引)
- 计算适当的列对之间的差异。
然后您可以:
- 平方这些差异
- 总结一下,
- 最后计算总和的根,得到所需距离。