【发布时间】:2014-07-07 17:10:26
【问题描述】:
我正在使用 scipy 和 numpy 在 python 中编程,我有一个查找数据表 (LUT),我可以这样访问:
self.lut_data[n_iter][m_iter][l_iter][k_iter][j_iter][i_iter]
我得到 *_iter 索引的位置对应于我保存在字典中的一组值。例如,i_iter 索引对应于光的波长,所以我有一个标签字典,值可以通过:
labels['wavelength']
它将返回每个 i_iter 对应的波长数组。如果我将其用作直接查找,这将很有用。如果我想要 500 nm 的 lut_data。我先在标签['wavelength'] 中找到相应的索引,然后用它来索引
lut_data[][][][][][wavelength_index]
我对其他维度做同样的事情,包括视角等它们对应于其他 *_iters
我需要做的是找到查找表中的值之间的值,如果我事先不知道查找表的尺寸,我需要它来工作。如果我这样做了,那么我知道如何使用每个维度的循环来解决问题。但是如果我不知道 LUT 的维度是多少,那么我就不知道要嵌套多少个循环。
我认为我应该能够使用 cKDTree 来做到这一点,但我无法弄清楚如何让它工作。我非常感谢一个看起来与我的结构相似的示例
谢谢
【问题讨论】:
-
数据结构我不是很懂,是Numpy数组吗?但我认为你应该看看scipy.interpolate.NearestNDInterpolator。它基于
cKDTree... -
我确实看过,谢谢。我无法让它工作。是的,我的数据结构是一个 numpy 数组。这里的文档不如其他文档好。什么是Npoints,是点数还是点数还是点的维数?它需要知道每个维度的大小吗? Ndims 的 Q 相同吗?我将积分作为元组传递吗? Ndims 是 nD 数组 data[x,y,z,k,j,l],其中 k,j,l 的阶数高于常见的 3D xyz?关于价值观的同样问题。我认为工作得很好(高于 2d,最好高于 3D 会帮助我理解它)。干杯
-
其实,现在我已经考虑过了,我不知道为什么我使用 [x][y][z] 而不是 [x,y,z] 来引用索引。我继承了一些我正在使用的代码并将其延续下去。那会有什么不同吗? LUT 是使用 numpy.zeros(
) 初始化的,并且使用任一表示法似乎表现相同。对不起,愚蠢的 Q 我不是一名程序员,更像是一名黑客。 -
好的理解
;)然后再考虑scipy.interpolate.RegularGridInterpolator我猜会更好。使用values您的 LUT 和points分别为np.aranges 的元组(每个维度的大小)。或者.. 更好的是,使用您拥有的“标签”。如果你愿意,我可以举个例子。