首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我不能计算出两个数字数组之间的距离?

为什么我不能计算出两个数字数组之间的距离?
EN

Stack Overflow用户
提问于 2020-10-06 05:43:43
回答 1查看 59关注 0票数 0

1.我有两个numpy数组,它们分别是data_test和data_train。

代码语言:javascript
运行
复制
    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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-06 06:55:47

当您执行数组减法(如arr_1 - arr_2 )时,实际上是Numpy尝试:

  • 从arr_1 (也在行中)的相应元素中减去arr_2中的行元素,对于第1行、
  • 等等,
  • 相同,直到两个数组的末尾。

只要两个数组具有相同的、相同的行数和列,此方案就能工作。

这一规则有三个例外:

所涉及的数组之一

  • 可以有一个单行。然后,这一行是广播(重复的),这样这个数组在概念上有尽可能多的行,所涉及的数组之一
  • 可以有一个单列。然后,上述广播沿操作数的columns.
  • One进行,是一个单值。然后将其“扩展”为一个数组,其中包含行/列数,类似于其他操作数(数组)。

阅读有关Numpy广播的更详细的观点。

在您的例子中,没有发生上述任何一个。这两个数组都有相同的列数,但行数是不同的。其结果是无法执行上述广播,整个操作失败。

可能的解决方案

也许第一个数组中的每一行(行数较少)可以与第二个数组中的一行“配对”,例如基于某个键字段。这种手术可以在潘达斯进行。参见Pandas中的联接方法。

然后你就可以:

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

F 243

然后你就可以:

  • 对这些差异进行平方,
  • 把它们加起来,
  • 最后计算和的根,得到想要的距离。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64219992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档