2013-02-12 76 views
-3

我问了一个类似的问题,但答复集中在索引编制0,我刚刚在问题的上下文中提到。在这里,我修改了这个问题,并且不想要零索引,特别是在我知道它可能在matlab中很复杂之后。Matlab - 索引变量

我的问题......

我试图做一个for-loopmatlab,将返回以下内容:

C_1 = 0 
C_2 = 0 
C_3 = 0 
C_4 = 0 
C_5 = 0 

我给它一个尝试如下,但没有工作:

function test 
for i=1:5 
     C{i} = 0 
    end 
end 

编辑

这是我得到的输出(为什么是这样)?

C = 

    [0] 


C = 

    [0] [0] 


C = 

    [0] [0] [0] 


C = 

    [0] [0] [0] [0] 


C = 

    [0] [0] [0] [0] [0] 

我该如何解决这个问题?

谢谢。

+0

可能重复[在循环中更改变量名称](http://stackoverflow.com/questions/14416582/changing-variable-name-in-loop ) – Shai 2013-02-12 10:09:45

+0

你想要一个数组或单元格?因为你的例子看起来像一个单元格。 – fpe 2013-02-12 10:13:07

+0

您是否删除了上一个问题?为什么你提出重复问题而不是改进现有问题?这种行为Spami SO。 – Shai 2013-02-12 11:59:11

回答

0

从你的榜样,它看起来像你想的:

[C{1:5,1}] = deal(zeros(1,1)); 

如果不是你想要一个数组,类型

C = zeros(5,1); 
0

你的原因,你所看到的是,在循环

for i=1:5 
    C{i} = 0 
end 

您不会用分号终止语句。会发生什么是:

第一次通过循环,单元格阵列C初始化为位于10的单个元素。结果是输出,因为没有终止的分号:

C = 

    [0] 

这表明C是单元阵列与单个元件 - 的阵列[0](一切在Matlab是一个数组,即使是标量)。

所述第二次通过for循环后,C是一个双单元,阵列,并显示其内容:

C = 

    [0] [0] 

如果你想你要描述的精确的输出,

C_1 = 0 C_2 = 0 C_3 = 0 C_4 = 0 C_5 = 0

你想要创建五个变量,其名称是以编程方式生成的。你可以使用这个功能是assignin,其语法是assignin(workspace, varname, value)

下面的循环不正是你所要求的

clear all 
for ii=1:5 
    assignin('base', sprintf('C_%d', ii), 0); 
end 
clear ii 

whos 

这将显示您已经创建了五个变量,C_1通过C_5,其值设置为零。

这应该是显而易见的如何修改此代码,以减少琐碎。总体而言,由于速度优势,您可能希望在任何实际应用中使用“常规”数组,而单个元素不同时的单元格数组不同 - 类型,大小等等。单元阵列的良好用法是对于标签:

myLabels={'this', 'that', 'label'}; 

通常,如果你需要五个值是所有零的数组,正确的语法几乎总是

myArray = zeros(1, 5); 

注 - 在Matlab,如果你写zeros(5)它会创建一个方形5x5矩阵。在一些其他包如FreeMat,产生1x5矩阵...