-3

我问了一个类似的问题,但答复集中在0我刚才在问题上下文中提到的索引上。在这里,我修改了问题并且不想要零索引,特别是在我知道它可能在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]

我该如何解决这个问题?

谢谢。

4

2 回答 2

0

From your example, it looks like you want this:

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

if, instead you want an array, type in

C = zeros(5,1);
于 2013-02-12T10:20:29.673 回答
0

你得到你所看到的原因是在循环中

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

你不要用分号终止语句。会发生什么:

0第一次通过循环,元胞数组 C 用at 位置的单个元素初始化1。结果被输出,因为没有终止分号:

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 矩阵......

于 2013-02-17T22:07:54.377 回答