在Python代码中使用Matlab在循环中创建变量名

时间:2014-09-02 11:22:30

标签: python matlab loops variables save

我在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.]

我想这样做以便稍后对每个行/列向量应用分析。

1 个答案:

答案 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