我在Python中有以下代码,如果可能的话,我想在MATLAB中实现类似的东西而不使用eval语法。
关键在于创造水平&来自不规则矩阵的垂直向量并将它们保存为变量。在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
输出是这样的:
列:
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.]
我想这样做以便稍后对每个行/列向量应用分析。
答案 0 :(得分:0)
您可以使用具有动态名称的sturct
for ii = 1:size(matrix,1)
nm = sprintf('name_x_%d',ii-1);
st.(nm) = matrix(ii,:);
end
for ii = 1:size(matrix,2)
nm = sprintf('name_y_%d',ii-1);
st.(nm) = matrix(:,ii).';
end
从
开始>> matrix = rand(3,5);
你最终得到了
>> st
st =
name_x_0: [0.7268 0.3005 0.5994 0.4717 0.0194]
name_x_1: [0.7780 0.3819 0.8218 0.4820 0.3969]
name_x_2: [0.2287 0.6207 0.4578 0.5712 0.2943]
name_y_0: [0.7268 0.7780 0.2287]
name_y_1: [0.3005 0.3819 0.6207]
name_y_2: [0.5994 0.8218 0.4578]
name_y_3: [0.4717 0.4820 0.5712]
name_y_4: [0.0194 0.3969 0.2943]
但是,请请,请, 请 听取Bakuriu。