Matlab:自动创建名称含义为

时间:2016-08-03 04:40:48

标签: matlab

我想以下列方式命名变量(类型为double):

k0 = D(1,1);
k1 = D(2,2);
k2 = D(3,3);
k3 = D(4,4);
k4 = D(5,5);
k5 = D(6,6);
k6 = D(7,7);
k7 = D(8,8);
...

最多k99自动使用for循环。所以我看到我应该使用数组或单元格而不是使用eval的double变量,因为它很慢。但是如果我应该使用数组或单元格而不是双变量,我必须从k{1}k(1)开始,这会失去意义,因为我想要k0指的是D(1,1) },即我的变量中的数字少1。如何创建有意义的单元格名称,如k{0}

另外,假设我有一个数组A。有时我还需要有意义的变量名称,例如

c111 = A(1)*A(1)*A(1)
c222 = A(2)*A(2)*A(2)
c333 = A(3)*A(3)*A(3)

如何使用for循环有效地创建c{111}

2 个答案:

答案 0 :(得分:1)

回答第一个问题: -

D=randn(100);    % A matrix of random elements of size 8x8
for m=0:99
    assignin('base', ['k' num2str(m)], D(m+1,m+1))
end

回答第二个问题: -

A=randn(1,3);    % An array of 3 random elements 
for n=1:3
    assignin('base', ['c' num2str(111*n)], A(n)^3)
end 

<强>评论: -
您已声明需要变量,例如k0k1k2,...和c111c222c333但你问的是如何创建k{0}k{1}k{2},...和c{111},{ {1}},c{222}。就你的需要而言,我已经给出了答案。关于后者,c{333}永远不可能,而k{0}c{111}c{222},......如果不使用前0中的任何一个,就没有意义: 100个值,然后是112:221的值,依此类推。虽然你可以使用:

c{333}

关于你在这些单词的评论中提出的要求&#34; 我还有一些使用负面索引&#34;的变量,你就永远不会在负面索引中有变量。如果您的意思是要创建名称为A=rand(1,3); % An array of 3 random elements c{333} = 0 ; % Pre-allocation for p=1:3 % Since you want to use a 'for loop' c{111*p} = A(p)^3; end k-1,...等的变量,则无法实现。另一种方法是使用k-2k_1,...等,但正如您在问题中所述&#34; k_2 指的是k0,即我的变量中的数字少了1个&#34;。这意味着D(1,1)将引用k_1等等,这对MATLAB来说也是无效的。

<强>推荐: -
你真的需要修改你的代码。

答案 1 :(得分:1)

使用结构:

D = rand(21);
c = 1;
for k = -10:10
    if k<0
        s.(['k_' num2str(abs(k))]) = D(c,c);
    else
        s.(['k' num2str(k)]) = D(c,c);
    end
    c = c+1;
end

这将为您提供如下结构:

s = 

     k_10: 0.51785
     k_9: 0.90121
     k_8: 0.40746
     k_7: 0.092989
     .
     .
     k_1: 0.75522
     k0: 0.55257
     k1: 0.28708
     .
     .
     k9: 0.94182
     k10: 0.2124

并且不要使用eval ...