python - 检查子数组是否在数组数组中
问题描述
我有一个数组数组,我在其中存储 x、y、z 坐标和该坐标的测量值,例如:
measurements = [[x1,y1,z1,val1],[x2,y2,z2,val2],[...]]
现在,在为某个坐标添加测量值之前,我想检查是否已经对该坐标进行了测量。所以我只能保持最大val测量。
所以问题是:
[xn, yn, zn, ...] 是否已经在测量中
到目前为止,我的方法是遍历数组并与类似的 sclied 条目进行比较
for measurement in measurements:
if measurement_new[:3] == measurement[:3]:
measurement[3] = measurement_new[3] if measurement_new[3] > measurement[3] else measurement[3]
但是随着测量数组越来越大,这是非常低效的。
另一种方法是两个单独的数组coords = [[x1,y1,z1], [x2,y2,z2], [...]]
和vals = [val1, val2, ...]
这将允许有效地检查现有坐标,[x,y,z] in coords
但稍后必须合并数组。
你能提出一个更有效的方法来解决这个问题吗?
解决方案
如果您想坚持使用内置类型(如果没有看到下面注释中的最后一点),我建议使用 adict
进行测量:
measurements = {(x1,y1,z1): val1,
(x2,y2,z2): val2}
然后添加一个新值 ( x,y,z,val
) 可以简单地是:
measurements[(x,y,z)] = max(measurements.get((x,y,z), 0), val)
笔记:
0
in的值measurements.get
应该是您期望的值的下限。如果您的值低于 0,则将其更改为适当的下限,这样每当(x,y,z)
您的度量中不存在时,就会get
返回下限,因此max
将返回val
. 您还可以避免必须指定下限并编写:measurements[(x,y,z)] = max(measurements.get((x,y,z), val), val)
您需要使用
tuple
作为密钥的类型,因此(x,y,z)
. 这是因为列表不能被散列,因此不允许作为键。最后,根据您正在执行的任务的复杂性,考虑使用更复杂的数据类型。我建议看一下pandas DataFrames,它们是处理此类事情的理想选择。
推荐阅读
- javascript - WebGL/THREE.js 有没有办法将视频 DOM 元素读入 YUV 纹理?
- html - 在首页显示上传的文件
- shopify - 如果所有产品不共享相同的标签 Shopify,则禁用结帐
- sql - 用一个不同的列合并两个表
- vector - Clojure - 在向量中找到相同值的最长条纹及其索引
- python - 当我尝试在 python 中写入文件时,我不断收到“ValueError: I/O operation on closed file”错误消息
- python - 在名称依赖于另一个实例方法的输入的实例/对象中运行方法
- c++ - 指针如何指向引用变量?
- domino-appdev-pack - 可以使用辅助通讯录吗?
- java - 使用 Java 流使用数据库游标