【问题标题】:Indexing into cell array索引到元胞数组
【发布时间】:2016-06-18 11:52:37
【问题描述】:

拜托,我需要任何人的帮助。我有一个多行两列的单元格数组。第二列有不同长度的元素。有些是一、二、三和四元素。我想使用 cell2mat 将第二列中的这些元素从单元格转换为双精度并将其存储在一个新变量中。我一直遇到此错误“分配的非单件 rhs 维度比非单件下标更多”。我已经尝试了很多次来解决这个问题,但我没有解决方案。任何人都可以帮忙吗?我的代码如下所示。

for i = 1:length(p)
     ps(i,:) = cell2mat(p{i,1}(1,2))
end

【问题讨论】:

  • 一个矩阵必须有固定的长度和宽度,如果你的第二列有不同的长度,你想用零填充元素较少的列吗?
  • 用零填充不会对最终结果产生任何影响。

标签: matlab indexing cell-array


【解决方案1】:

您需要(显式)指定输入数据的列范围,MATLAB 将自动扩展 ps 以适当地容纳您的数据(用零填充空单元格);

for k = 1:numel(p)
    data = cell2mat(p{k,1}(1,2));
    ps(k, 1:numel(data)) = data;
end

显然这会对性能产生一些影响,因为每次循环迭代都会更改 ps 的大小。

如果你愿意,你可以预先分配 ps 这样的东西

allData = cellfun(@(x)cell2mat(x(1,2)), p(:,1), 'uniform', 0);
ps = zeros(numel(allData), max(cellfun(@numel, allData)));

【讨论】:

  • 使用上面的代码运行数据时出现“索引超出矩阵维度”的错误。
  • @K.Sante 哪一行产生错误?它是根据您提供的输入建模的,因此p 的条目可能不需要至少 1 行和 2 列(正如您在帖子中假设的那样)
  • 这是代码产生错误的地方,data = cell2mat(P{k,1}(1,2));。谢谢。
  • @K.Sante 如果您删除原始帖子中作业的左侧,它甚至会按照您写的方式运行吗?
  • @Suave,它确实从每行只有一个元素的地方运行,然后当元素数量增加到两个或三个时,代码就会崩溃。我手动检查并意识到如果第一行有两个元素,则代码将所有具有元素一或二的行,如果元素数量增加到三,则分解。就在那时我收到了这个错误“Assignment has more non-singleton rhs dimensions than non-singleton subscripts”。
猜你喜欢
  • 2017-04-14
  • 2011-07-17
  • 2015-05-29
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2015-07-29
  • 1970-01-01
相关资源
最近更新 更多