使用另一个位置矩阵将1D矢量的元素放入3D矩阵中

时间:2013-06-04 16:24:40

标签: matlab

我有一个数据点向量,这些数据点是由一个大列表中的其他程序从3D数组中保存的。向量是nk元素长。 nk = nx * ny * nz其中nx,ny和nz是原始3D数组的尺寸。

原始数组中数据点的位置存储在(nk x 3)数组中,每行排列(位置(k,:)),给出相应数据的(i,j,k)位置点。

我不能在我的数据数组上使用reshape,因为位置向量不简单(它取决于一些与数据生成方式有关的东西 - 它不是完全随机的 - 但我不一定知道是什么它看起来像事先)。

如果nk向量称为'data',则nk x 3位置数组称为'position',输出数组称为'data_reshaped',然后我正在执行以下操作:

for k = 1:nk
    data_reshaped(position(k,1),position(k,2),position(k,3)) = data(k);
end

这真的很慢 - 是否有一些更快的方法而不了解'位置'的样子?

1 个答案:

答案 0 :(得分:3)

您可以使用sub2ind功能:

data_reshaped = zeros(nx, ny, nz);
data_reshaped( sub2ind([nx ny nz], position(:,1), ...
                                   position(:,2), ...
                                   position(:,3)) ) = data;