2014-11-17 5 views
0

Я только что начал программировать в Matlab, поэтому я мог задавать очень простой вопрос.Вызов последовательных переменных в петлях Matlab

Предположим, что у меня есть 10 переменных: X_1, X_2 ... X_10. Каждая из этих переменных является матрицей 3x3.

Я хочу умножить отдельные матрицы в «цикл цикла» на константу и сохранить их в переменных Y_1, Y_2 ... Y_10. Последнее не будет проблемой, так как я знаю, как хранить новые переменные последовательно в массиве ячеек (также используя «цикл»).

Я не могу понять, как вызвать переменные X в цикле «for», где j = 1: 10. Я видел несколько ответов, которые используют «eval», но многие говорят, что это не самый эффективный способ.

Может ли кто-нибудь мне помочь?

Большое спасибо заранее!

+0

Можете ли вы использовать клеточные массивы или третье измерение (называемые «страницами»)? –

+3

Чтобы продумать комментарий @ DasKrümelmonster по третьему измерению, если бы я получил это право. Вместо создания таких 10 переменных, почему бы не иметь трехмерный массив размером 3 х 3 х 10 для хранения всех этих данных в первом место? – Divakar

+0

Возможный дубликат: http://stackoverflow.com/questions/15463411/how-to-call-sequential-variables-with-for-loop-matlab?rq=1 –

ответ

0

Определенное создание 3D-массива - лучшее решение.

Тогда вместо зацикливания, который, как правило, медленно в среде MATLAB и других интерпретируемых языках, вы можете использовать mtimesx функции, если вы имеете дело с матрицей-матрицей или -векторным умножением, или просто использовать bsxfun для поэлементного умножения

X(:,:,1) = X_1; 
X(:,:,2) = X_2; 
%// and so on 

constants = permute(1:10, [3,1,2]) 

Y = bsxfun(@times, X, constants); 
+0

Спасибо всем вам за помощь! Хотя хранение переменных в массивах (3D) полезно, из ваших ответов кажется, что я должен будет сделать это вручную в первый раз, чтобы я мог их вызвать с помощью X (:,:, n). Что, если вместо 10 переменных у меня 1000? Есть ли способ вызвать их для сохранения их в массиве последовательно? – aulky11

+0

откуда вы берете данные? вероятно, вы не вводите их вручную. Вам не нужно вводить их в промежуточные массивы. Вручную вы можете поместить их напрямую. PS: пожалуйста, подтвердите или принимайте вопрос) –

+0

Еще раз спасибо! Я импортирую данные из разных файлов Excel. Обычно я читаю около 10 различных входных переменных, каждый в течение 20 лет. Каждая из этих переменных может быть относительно большими матрицами (например, 5000 х 5000). Я предполагаю, что мне придется хранить их в массивах вручную в первый раз (как вы предлагаете), а затем называть их с помощью петель. Очень полезно! – aulky11