【问题标题】:Matlab - Indexing variablesMatlab - 索引变量
【发布时间】:2013-01-27 14:25:50
【问题描述】:

我问了一个类似的问题,但回复集中在0 的索引上,我刚刚在问题的上下文中提到了这一点。在这里,我修改了问题并且不想要零索引,尤其是在我知道它在 matlab 中可能很复杂之后。

我的问题...

我正在尝试在matlab 中创建一个for-loop,它将返回以下内容:

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]

我该如何解决这个问题?

谢谢。

【问题讨论】:

  • 你想要一个数组还是一个单元格?您的示例中的原因看起来像一个单元格。
  • 之前的问题你删了吗?为什么你提出重复的问题而不是改进现有的问题?这种行为是垃圾邮件。

标签: matlab for-loop indexing


【解决方案1】:

从您的示例中,您似乎想要这样:

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

如果您想要一个数组,请输入

C = zeros(5,1);

【讨论】:

    【解决方案2】:

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

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

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

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

    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_1C_5,值设置为零。

    如何将此代码修改为不那么琐碎的东西应该很明显。

    总体而言,由于速度优势,您可能希望在可行的情况下使用“常规”数组,并在单个元素不同时使用元胞数组 - 不同的类型、大小等。对元胞数组的良好用途是标签:

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

    通常,如果您需要一个包含五个全为零的值的数组,则几乎总是正确的语法

    myArray = zeros(1, 5);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-18
      • 2014-06-08
      • 1970-01-01
      • 2012-04-08
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多