我有一个来自1deg圆柱形切片的7426x32二维数据阵列。它包含:X,Y,Z和29个变量,如温度,密度,压力等。在X方向有79个网格节点,在Y中有2个,在Z中有47个。它是一个'线'的Y方向的细胞体积。数据以这种方式写出:
package_name&referrer=referrer_string
我需要插入变量以获得每个单元体积中变量的平均值(这使得3713个值),将每个变量乘以每个单元格中包含的体积,然后将其全部加起来。我知道我可以在Matlab中使用 interp3 函数,但我不确定如何让函数处理我的数据。
'直觉本能'告诉我应该:
do Z = 1,47
do Y = 1,2
do X = 1,79
X,Y,Z, then the other 29 variables at each node
enddo
enddo
enddo
获取第30列中的变量。但它并没有真正起作用,我不确定它如何与我的数据排列方式一起工作。有人能指出我正确的方向吗?
非常感谢!
答案 0 :(得分:1)
诀窍是interp
系列函数采用meshgrid
格式的输入坐标和值,因此在这种情况下,前三个参数必须是坐标空间的3D矩阵。 / p>
您可以使用meshgrid
重建此内容:
[X,Y,Z] = meshgrid(1:79, 1:2, 1:47);
然后,X,Y和Z中的每一个将是表示相应坐标的79x2x47矩阵。
因此,您可以直接根据您对输入数据的了解来构造它,但是直接在数据上使用reshape
会更加健壮和通用,特别是因为您必须在第30列执行相同的过程把它放到相同的格式(你仍然需要知道你有多少个坐标点,但是可以通过编程方式为未知的数据集工作)。
尝试一下:
X = reshape(A(:,1), 79, 2, 47);
Y = reshape(A(:,2), 79, 2, 47);
Z = reshape(A(:,3), 79, 2, 47);
col30 = reshape(A(:,30), 79, 2, 47);
Vq = interp3(X,Y,Z,col30,Xq,Yq,Zq);
其中Xq,Yq和Zq是测试坐标,可以是矢量或标量 - 它们不需要是网格格式。请记住,您需要为29个变量中的每个变量调用interp3。
它可能不会立即起作用 - 坐标排序很重要,我不相信我已经将您对变量的描述正确转换为Matlab的形式(它进行了列式索引,因此有时矩阵代表YXZ数据,但其他时间XYZ规则适用,我总是喜欢检查数据,以确保我做对了。如果不是手动检查矩阵以确保它们被正确排序并根据需要置换reshape
中的79,2,47个参数的顺序。