python - 如何使用 numpy 数组找到具有最小 MSE 的值?
问题描述
我可能的价值观是:
0: [0 0 0 0]
1: [1 0 0 0]
2: [1 1 0 0]
3: [1 1 1 0]
4: [1 1 1 1]
我有一些价值观:
[[0.9539342 0.84090066 0.46451256 0.09715253],
[0.9923432 0.01231235 0.19491441 0.09715253]
....
我想弄清楚我的哪些可能值最接近我的新值。理想情况下,我想避免for
循环并想知道是否有某种矢量化方法来搜索最小均方误差?
我希望它返回一个如下所示的数组:[2, 1 ....
解决方案
您可以使用np.argmin
来获取 rmse 值的最低索引,该索引可以使用来计算np.linalg.norm
import numpy as np
a = np.array([[0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 0],[1, 1, 1, 0], [1, 1, 1, 1]])
b = np.array([0.9539342, 0.84090066, 0.46451256, 0.09715253])
np.argmin(np.linalg.norm(a-b, axis=1))
#outputs 2 which corresponds to the value [1, 1, 0, 0]
如编辑中所述, b 可以有多行。操作员想避免 for 循环,但我似乎找不到避免 for 循环的方法。这是一个列表组合方式,但可能有更好的方法
[np.argmin(np.linalg.norm(a-i, axis=1)) for i in b]
#Outputs [2, 1]
推荐阅读
- kong - 在kong api网关中,如何使用生成的访问令牌确保第三方只能访问允许的资源(范围)
- pyspark - PySpark 列对象上的字符串切片语法表现得像子字符串?
- html - 详细信息/摘要中自定义展开/折叠按钮的 ARIA 属性
- python - 在 Python 中的类中线程化多个方法
- visual-studio - 自动完成删除先前的功能名称等
- sql - .verify.JDBC.result 中的错误(r,“无法检索 JDBC 结果集”,:无法检索 JDBC 结果集 JDBC 错误:数值“NA”不是
- flutter - Flutter - 有效地将视频文件处理成内存中的一系列帧?
- google-cloud-platform - JobStatistics 中“waitMsAvg”的确切含义是什么?
- dnsmasq - 动态重新加载转发规则而不弹跳 dnsmasq
- api - 在 GitHub api 中超出 API 限制