У меня есть следующий код в Python, и я хотел бы реализовать что-то подобное в MATLAB без использования синтаксиса eval, если это возможно.Создать переменное имя в цикле в Matlab из кода Python
Цель состоит в том, чтобы создать горизонтальные & вертикальные векторы из нерегулярной матрицы и сохранить их как переменную. В python это прямолинейно, но у меня возникают проблемы с реализацией этого в MATLAB без использования eval. Есть идеи? Спасибо заранее!
например, в Python:
x,y = 3,5
matrix = np.zeros((x,y))
matrix_T = matrix.reshape(y,x)
array_names_y = ['name_y_%d' %i for i in xrange(y)]
array_names_x = ['name_x_%d' %i for i in xrange(x)]
for i in xrange(len(array_names_x)):
for name,row in zip(array_names_x,matrix):
globals()[name]=row
for i in xrange(len(array_names_y)):
for name,column in zip(array_names_y,matrix_T):
globals()[name]=column
Выход Somthing так:
колонны:
name_y_0 = [ 0. 0. 0.]
name_y_1 = [ 0. 0. 0.]
name_y_2 = [ 0. 0. 0.]
name_y_3 = [ 0. 0. 0.]
name_y_4 = [ 0. 0. 0.]
rows:
name_x_0 = [ 0. 0. 0. 0. 0.]
name_x_1 = [ 0. 0. 0. 0. 0.]
name_x_2 = [ 0. 0. 0. 0. 0.]
Я хочу сделать это, чтобы потом применить анализ для каждой строки/столбца вектор.
можно объяснить немного больше о том, что вы хотите? – Kasramvd
*** ARGH !!! *** Почему?!? Зачем вам это делать? Динамически создающие переменные ** никогда не делают правильных действий. Мое предложение: изменить свой код на python на * not * mess с 'globals()', а затем код будет отображать почти 1-к-1 в MATLAB (таким образом, решая также проблему, которую вы задали). Прочитайте [Как сделать ряд переменных A1, A2, A3, ... A10?] (Http://www.mathworks.com/matlabcentral/answers/143-how-do-i-make-a-series -of-variables-a1-a2-a3-a10) – Bakuriu
Не можете ли вы использовать массив ячеек? Но если вы хотите это сделать, то почему бы не использовать 'eval'? Это ужасная идея, о которой упомянул Бакуриу, но если вы настаиваете на этом, то использование «eval» - это «правильный» подход. Но, как я уже сказал, скорее используйте массивы ячеек или структуры – Dan