2

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

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

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

如果 nk 向量称为“数据”,则 nk x 3 位置数组称为“位置”,输出数组称为“data_reshape”,那么目前我正在执行以下操作:

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

这真的很慢 - 在不知道“位置”是什么样子的情况下有一些更快的方法吗?

4

1 回答 1

3

你可以使用sub2ind功能:

data_reshaped = zeros(nx, ny, nz);
data_reshaped( sub2ind([nx ny nz], position(:,1), ...
                                   position(:,2), ...
                                   position(:,3)) ) = data;
于 2013-06-04T16:31:39.877 回答