【问题标题】:MATLAB Populate matrix with elements from a cell arrayMATLAB 使用元胞数组中的元素填充矩阵
【发布时间】:2014-01-28 15:58:28
【问题描述】:

我有一个矩阵,我想将单元格数组中的元素放入矩阵的第三列。我该怎么做?

这是我的意思的一个例子。 这是矩阵(E):

43.4350000000000    -88.5277780000000   NaN 733144
43.4350000000000    -88.5277780000000   NaN 733146
43.4350000000000    -88.5277780000000   NaN 733148
43.4350000000000    -88.5277780000000   NaN 733150

我想取 NaN 列(第 3 列)并将单元格数组 (uID) 的元素放入其中 元胞数组如下所示:

'027-0007'
'079-0026'
'119-8001'
'133-0027'

我使用了这个代码:

E(:,3) = reshape(repmat(uID',length(all_dates),1),[],1)

将uID的每一行复制一定次数,然后将其重新整形为一列,使其与E列的大小相同。

但是,当我现在运行它时,E 是一个矩阵而 uID 是一个单元格这一事实导致 MATLAB 告诉我Conversion to double from cell is not possible= 右侧的部分工作正常。将单元格元素放入 E 是导致问题的原因。

【问题讨论】:

  • 单元格包含字符串,而目标矩阵必须包含数字。例如,您想如何将'027-0007' 转换为数字?那会是20吗?还是270007?还是……?
  • 另外,为什么需要repmat 元胞数组?它的大小似乎适合您示例中的列大小
  • 027-0007 不是数字。这是一个站点ID。这就是我遇到这个问题的原因。我的示例只是更大数组的一小部分,这就是我使用 repmat 的原因。实际数组是 376x4。
  • 你只能用数字填充矩阵,不能用siteID(字符串)
  • 这是一个更大的问题 (stackoverflow.com/questions/21390103/…) 的一部分。那你能看看那个吗?如果我无法用字符串填充矩阵,则无法检查日期和 SiteID 之间的一致性以填充数据或添加 NaN。为那个问题给出的答案有一个很好的方法,但是遇到了这个问题。

标签: matlab matrix double cell


【解决方案1】:

您可以将数据插入到另一个单元格中,而不是将数据插入到普通矩阵中

  Ecell=num2cell(E); 
  Ecell(:,3)=uID;

【讨论】:

    【解决方案2】:

    元胞数组的内容不是数字,因此不能插入数字矩阵。您可以使用 str2double 将字符串元胞数组转换为数值数组,如下所示

     >> str2double({'3','17.5'})
    
    ans =
    
        3.0000   17.5000
    

    但这只是当单元格的字符串内容代表实际数字时,在您的情况下似乎不是这样。

    【讨论】:

    • 是的,它们不是数字。它们是 siteID,所以我必须保持这种格式。
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多