python - 如何:给定数组 [U,x,y,z] 中的值 (x,y,z) 输出 U 的关联值
问题描述
这看起来很简单,但我正在寻找一种计算效率非常高(快速)的方法来做到这一点。我有一组数据,例如 N x 4 numpy 数组。
data = [[U[0],x[0],y[0],z[0],
U[1],x[1],y[1],z[1],
....
U[N],x[N],y[N],z[N]]]
我想做的是编写一个函数,它将元素 x[N],y[N],z[N] 的某些给定组合的实际数值作为输入并输出 U[N] 的数值在同一行。没有描述数据的分析函数,它是纯数字的,所以我只需要给出一些物理位置值的组合,比如 (x[51],y[51],z[51]),它将输出值U 位于具有 x[51]、y[51]、z[51] 的行中。下面给出了它应该如何工作的示例:假设 x[51] = 2.4, y[51] = 6.3, z[51] = 9.45 和 U[51] = 13.665
input >>
function(2.4,6.3,9.45)
output >>
13.665
所以目标本质上是让我弄清楚如何编写能够以有效方式执行此操作的函数!
解决方案
如果您希望进行大量搜索,您可以将值存储在字典中并使用,和值U
查找它们,如下所示:x
y
z
import numpy as np
data = np.array([
[ 1.234, 3.7, 9.1, 2.74],
[13.665, 2.4, 6.3, 9.45],
[12.431, 8.1, 5.3, 4.25]
])
search_dict = dict(zip(map(tuple, data[:, 1:4]), data[:, 0]))
# or search_dict = {tuple(row[1:4]): row[0] for row in data}
search_dict[(2.4, 6.3, 9.45)]
# 13.665
或者,这对熊猫来说是一项好工作:
import pandas as pd
df = pd.DataFrame(data, columns=['U', 'x', 'y', 'z']).set_index(['x', 'y', 'z'])
df.loc[(2.4, 6.3, 9.45), 'U']
构建字典或 DataFrame 将需要一些时间和内存,但是每次搜索都会得到非常快的结果,无论data
.
如果您有一个大数组并且搜索不多,则可以使用蛮力搜索:
matched_rows = (data[:, 1:4]==np.array([2.4, 6.3, 9.45])).all(axis=1)
data[matched_rows, 0]
# array([13.665])
推荐阅读
- c# - 读取 customdocumentproperties 的公共值并使其在功能区中被选中
- hibernate - Spring JPA 规范一对多连接 3 个表
- python - 成功构建映像后尝试运行 docker 容器
- html - 为什么根容器中没有 `max-width` 子元素中的 `display: flex` 会使根容器占据 100% 的宽度?
- mysql - Mysql`SET FOREIGN_KEY_CHECKS = ON`在游标循环内打印注释时出错
- winforms - C# 桌面应用程序
- docker - docker-compose up `require':无法加载此类文件 -- pg (LoadError)
- mysql - 检测 Django 中的数据库更改
- c++ - Xcode 自动完成不显示没有 .h 文件结尾的 STL 头文件
- flutter - 创建可拖动的小部件列表