我有一个数据点向量,这些数据点是由一个大列表中的其他程序从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
这真的很慢 - 是否有一些更快的方法而不了解'位置'的样子?
答案 0 :(得分:3)
您可以使用sub2ind
功能:
data_reshaped = zeros(nx, ny, nz);
data_reshaped( sub2ind([nx ny nz], position(:,1), ...
position(:,2), ...
position(:,3)) ) = data;