MATLAB: преобразовать плоский список файлов в многомерный массив - PullRequest
2 голосов
/ 03 марта 2012

Я полностью застрял с этим: я начинаю с плоского типа файла списка, который я получаю из оператора 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), где каждый 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

Мой вопрос: как я могу сделать это для вышеупомянутого 4D массива без использования цикла for . Есть ли способ "Matlab Way" сделать это?

Любая помощь очень ценится!

Спасибо, Janosch

1 Ответ

1 голос
/ 03 марта 2012

Вы должны иметь возможность делать то, что вы хотите, используя линейное индексирование и функцию sub2ind. Это будет выглядеть примерно так.

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

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

x(i) = v;
...