MATLAB:将平面文件列表转换为多维数组

时间:2012-03-03 12:35:56

标签: matlab multidimensional-array flat-file

我完全坚持这一点:我从一个像这样的SQL语句得到的平面文件类型的列表开始,并希望将其转换为4D数组。

SELECT a1, a2, a3, a4, v FROM table A;

a1 a2 a3 a4 v
--------------
2 2 3 3 100
2 1 2 2 200
3 3 3 3 300 
...
  • a1到a4是(1:5)范围内的一些标识符(整数),它们也是新填充的4D数组的坐标。
  • v是一个值(double),例如衡量结果。

我现在想要的是将此列表转换为维度(5,5,5,5)的4D数组,其中每个v都放在右侧坐标处。

这可以使用for循环轻松完成,但由于我有大量数据,因此这不太可行。

如果我只有一个维度,我会做这样的事情:

a1 = [2;5;7];           % Identifiers
v = [17;18;19];         % Values
b1 = (1:10)';           % Range of Identifiers
V = zeros(10,1);        % Create result vector with correct dimensions
idx = ismember(b1, a1); % Do the look up
V(idx) = v;             % Insert

我的问题:如何在不使用for循环的情况下为上述4D数组执行此操作。这样做有“Matlab方式”吗?

非常感谢任何帮助!

谢谢, 贾尼奥斯奇

1 个答案:

答案 0 :(得分:1)

您应该能够使用线性索引和sub2ind函数执行您想要的操作。它看起来像这样。

x=zeros(5,5,5,5); %initialize output vector

i = sub2ind(size(x),a1,a2,a3,a4);

x(i) = v;