【问题标题】:MATLAB: Transform a flat file list into a multi-dimensional arrayMATLAB:将平面文件列表转换为多维数组
【发布时间】:2012-03-03 12:35:55
【问题描述】:

我完全坚持这一点:我从一个平面文件类型的列表开始,我从这样的 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 是一个值(双精度),例如测量结果。

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

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

如果我只有 1 个维度,我会这样做:

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 方式”?

非常感谢任何帮助!

谢谢, 亚诺施

【问题讨论】:

  • 我很清楚,你有 625 个观察值,其中前四列代表矩阵索引,最后一列代表矩阵值?
  • 是的。它也可能小于这个值,在这种情况下,缺失值将为零。
  • 这可以通过线性索引来完成吗?

标签: matlab multidimensional-array flat-file


【解决方案1】:

您应该能够使用线性索引和 sub2ind 函数做您想做的事情。它看起来像这样。

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

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

x(i) = v;

【讨论】:

  • 谢谢,正是我想要的!
猜你喜欢
  • 2012-02-06
  • 2020-03-22
  • 1970-01-01
  • 2011-08-30
  • 2013-05-17
  • 2015-08-18
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多