我完全坚持这一点:我从一个像这样的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
...
我现在想要的是将此列表转换为维度(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方式”吗?
非常感谢任何帮助!
谢谢, 贾尼奥斯奇
答案 0 :(得分:1)
您应该能够使用线性索引和sub2ind函数执行您想要的操作。它看起来像这样。
x=zeros(5,5,5,5); %initialize output vector
i = sub2ind(size(x),a1,a2,a3,a4);
x(i) = v;