Как сохранить неизвестный номер матрицы в Matlab? - PullRequest
0 голосов
/ 10 сентября 2011

У меня проблема, я работаю над функцией Matlab, которая должна выдавать неизвестное количество матриц. проблема в том, что я не знаю, как я могу их хранить, мне нужна структура типа [A,B,C], где каждая запись может быть другой матрицей, с разным размером.

как это сделать?

Ответы [ 3 ]

3 голосов
/ 10 сентября 2011

Рассмотрим следующую функцию, она возвращает различное количество выходов в зависимости от входных аргументов:

function varargout = myFunc(num)
    for i=1:num
        varargout{i} = rand(i+2,i);
    end
end

Теперь, чтобы вызвать такую ​​функцию и получить весь ее вывод, попробуйте следующее:

num = 5;
X = cell(num,1);
[X{1:num}] = myFunc(num);        %# [A,B,C,D,E] = myFunc(5)

результат:

>> X
X = 
    [3x1 double]
    [4x2 double]
    [5x3 double]
    [6x4 double]
    [7x5 double]

Доступ к отдельным матрицам можно получить с помощью записи массива ячеек:

>> X{5}
ans =
      0.75493      0.68342      0.19705      0.80851      0.67126
      0.24279      0.70405      0.82172      0.75508      0.43864
       0.4424      0.44231      0.42992       0.3774       0.8335
       0.6878     0.019578      0.88777      0.21602      0.76885
      0.35923      0.33086      0.39118      0.79041      0.16725
      0.73634      0.42431      0.76911       0.9493      0.86198
      0.39471      0.27027      0.39679      0.32757      0.98987
1 голос
/ 10 сентября 2011

Вам нужен массив ячеек . Учтите это:

A = {[1,2,3;4,5,6],rand(20,'single'), 'hello world'}

A = 

[2x3 double]    [20x20 single]    'hello world'

A - это контейнер ячеек, в котором хранятся разные типы данных и матрицы разных размеров. Чтобы индексировать конкретные «ячейки», используйте круглые скобки, например, так:

A(1:2)
ans = 

[2x3 double]    [20x20 single]

При индексировании любого массива с круглыми скобками всегда возвращает тот же тип данных, что и у массива. Итак, здесь вы получаете два массива клеток. Чтобы получить доступ к содержимому ячейки, используйте скобки вместо скобок. Например.,

A{1}
ans =

 1     2     3
 4     5     6

Чтобы индексировать внутри ячейки, используйте скобки и фигурные скобки, например:

A{1}(2,1:2)
ans =

 4     5

Подробнее о массивах ячеек, их использовании и индексации можно прочитать в блоге Mathworks .

0 голосов
/ 12 сентября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...