【问题标题】:how to insert values in to a multi dimensional cell array in matlab?如何在matlab中将值插入到多维单元格数组中?
【发布时间】:2018-05-17 12:27:33
【问题描述】:

我有一个单元格数组定义为A = cell(i,8);

i = 4。现在我正在尝试用循环中存在的函数填充 4 x 8 单元格数组。

说,

A = cell(i,8);
for index=1:8
A{i,index} = zeros(C{i}, D{i}, E{i});
end

其中,C{i}, D{i}, E{i} 的值为

C{i} = [10]    [10]    [10]    [10]
D{I} = [13]    [13]    [13]    [13]
E{I} = [62]    [91]    [71]    [89]

并且单元格的内容显然是零,因为我使用 zeros() 但我需要这一步进行进一步处理。

现在,我应该得到 A(Cell array) - 4 x 8 Dimension 的值,如下所示,

10x13x62 double10x13x62 double  10x13x62 double 10x13x62 double 10x13x62 double 10x13x62 double 10x13x62 double 10x13x62 double
10x13x91 double 10x13x91 double 10x13x91 double 10x13x91 double 10x13x91 double 10x13x91 double 10x13x91 double 10x13x91 double
10x13x71 double 10x13x71 double 10x13x71 double 10x13x71 double 10x13x71 double 10x13x71 double 10x13x71 double 10x13x71 double
10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double

相反,我得到的输出是,

[]  []  []  []  []  []  []  []
[]  []  []  []  []  []  []  []
[]  []  []  []  []  []  []  []
10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double 10x13x89 double

我希望我在循环和单元格数组后面缺少一些简单的逻辑,我对单元格数组和循环的初始化是否正确?如果没有,请建议我找到上面提到的解决方案。

谢谢。

【问题讨论】:

  • 正如您自己所说,i 等于 4。您如何期望 A{i,index} = zeros(C{i}, D{i}, E{i}); 将值存储在第 4 行以外的行中?
  • 哦,首先,感谢 Sardar 的回复,我有点困惑,因为当我创建一个 A = cell(i,8); 时,它会创建一个 1x8 单元格数组,所以我确信单元格数组已经初始化正确,但我清楚地搞砸了循环中的某些地方,我应该如何重写A{i,index} = zeros(C{i}, D{i}, E{i}); 以获得预期的输出?你能帮忙吗?
  • 非常感谢您提供宝贵的信息 Sardar.. 非常感谢
  • 嗨,Sardar,很抱歉再次打扰,我已经像你说的那样更改了代码,但是4x8 单元格数组中的所有单元格都变成了10x13x89 double。相反,它应该是10x13xN,N 应该分别取 `C{I}、D{I}、E{I} 的值,如上所述,但它只存储 E{i} 的值,请建议。

标签: arrays matlab for-loop indexing cell-array


【解决方案1】:

第一件事 A{i,index} = zeros(C{i}, D{i}, E{i}); 不正确,因为 zero() 不接受数组作为参数。

此代码将解决您的问题

i=4;
A = cell(i,8);

C{i} = {10,10,10,10};
D{i} = {[13]    [13]    [13]    [13]};
E{i} = {[62]    [91]    [71]    [89]};
for j=1:8
 for index=1:4
    A{index,j} = zeros(cell2mat(C{i}(index)), cell2mat(D{i}(index)), cell2mat(E{i}(index)));        
 end
end

这是输出

A =

  4×8 cell array

  Columns 1 through 6

    [10×13×62 double]    [10×13×62 double]    [10×13×62 double]    [10×13×62 double]    [10×13×62 double]    [10×13×62 double]
    [10×13×91 double]    [10×13×91 double]    [10×13×91 double]    [10×13×91 double]    [10×13×91 double]    [10×13×91 double]
    [10×13×71 double]    [10×13×71 double]    [10×13×71 double]    [10×13×71 double]    [10×13×71 double]    [10×13×71 double]
    [10×13×89 double]    [10×13×89 double]    [10×13×89 double]    [10×13×89 double]    [10×13×89 double]    [10×13×89 double]

  Columns 7 through 8

    [10×13×62 double]    [10×13×62 double]
    [10×13×91 double]    [10×13×91 double]
    [10×13×71 double]    [10×13×71 double]
    [10×13×89 double]    [10×13×89 double]

【讨论】:

  • 嗨 Nagdawi,我用你给出的上述逻辑进行了尝试,但它抛出了Cell contents reference from a non-cell array object 的错误,仅供参考,我提供的这段代码已经在for i = 1:nfiles 的循环内,所以,我希望没有必要添加您提供的for index=1:4 循环。所以我只是将代码行重写为A{i,J}=zeros(cell2mat(C{i}(i)), cell2mat(D{i}(i)), cell2mat(E{i}(i)));C{I}, D{I}, E{I} Is dynamic, it changes for every file i.e for i = 1:nfiles 的值。请就上述内容提供您的建议。
  • 你用什么替换for index=1:4?为什么?我编写此代码只是为了向您展示如何制作与您的问题相同的输出。根据我的回答,您可以根据您的问题影响您的逻辑。
  • 非常感谢 Nagdawi,它成功了 :) ...我非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2015-09-24
  • 1970-01-01
  • 2016-08-31
  • 2017-05-22
  • 1970-01-01
相关资源
最近更新 更多