【问题标题】:How to add rows in between cell array in Matlab?如何在 Matlab 中的单元格数组之间添加行?
【发布时间】:2023-03-03 14:13:01
【问题描述】:

我有两个元胞数组。

A(290*6)B(300*6);

两个数组中的第一列相同。我使用“ismember”比较了两个元胞数组的第一列。我想这样做;在单元格数组(A)中缺少单元格元素的情况下,我必须添加缺少元素的行。在matlab中可以吗?

【问题讨论】:

  • 这有点含糊,请给出模拟示例数据,其中 A 为 3×1,B 为 5×1,以及您想要的确切输出(对于那些最小的模拟示例)

标签: matlab cell-array


【解决方案1】:

在现有矩阵或元胞数组中插入行并不容易;构建一个新的并适当地填充它更容易。

在元胞数组 B 中查找 A 的第一列内容的位置:

[aa,bb] = ismember([A{:,1}],[B{:,1}]);

创建一个新的空元胞数组:

C = cell(length(B),size(A,2))

填写:

C(:,1)=B(:,1)
C(bb,2:end) = A(aa,2:end);

例如,给定这个 A(“3”行缺失)

[1]    [3]
[2]    [5]
[4]    [3]

还有这个B:

[1]
[2]
[3]
[4]

这会返回:

[1]    [3]
[2]    [5]
[3]     []
[4]    [3]

用上一行填充空格(这仅在空行不连续且C的第一行非空时才有效):

n = setdiff(1:length(C),bb)
C(n,2:end) = C(n-1,2:end);

【讨论】:

  • 非常感谢。有效。我很抱歉我的问题不完整。我可以用空单元格上方的数据填充那些空单元格吗?很抱歉在这里发布问题给您带来不便。
  • 非常感谢。有效。我很抱歉我的问题不完整。我可以用空单元格上方的数据填充那些空单元格吗?抱歉在这里发布问题给您带来不便。例如所示,空单元格应替换为 [5]。这可能吗?
  • 查看编辑 - 尽管根据空行的分布情况,您可能需要稍微尝试一下。
【解决方案2】:

我觉得你可以直接使用setdiff的第二个输出

[d,i] = setdiff(B(:,1),A(:,1))

i 会告诉你 A 中缺少的行在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多