我想以下列方式命名变量(类型为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}
?
答案 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
<强>评论: - 强>
您已声明需要变量,例如k0
,k1
,k2
,...和c111
, c222
,c333
但你问的是如何创建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-2
,k_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
...