【问题标题】:How do I replace an element from a cell array?如何替换元胞数组中的元素?
【发布时间】:2017-02-09 22:24:24
【问题描述】:

我有一个元胞数组:

A = {NaN, ‘k’, ‘m’, ‘n’}

我想用 NaN 替换除 A 的第三个元素之外的所有元素以获得

B = {NaN, NaN, ‘m’, NaN}

请对我如何解决此问题有任何帮助/建议吗?另外,是否可以用一行代码做到这一点?

【问题讨论】:

  • 你能再具体一点吗?解决方案应该有多普遍?您是否有一个整数数组,其中包含应该用 NaN 替换的元素的索引,或者您如何知道应该替换哪些元素?
  • 你为什么将双 NaN 与字符结合使用?对我来说很奇怪的组合
  • 好问题@julian59189。实际上,我想不出更好的方法来说明问题,因为主代码有点繁琐,而且可能很难理解——因此我决定把问题简单化,并希望我能得到一个我可以适应的答案.对于您问题的最后一部分,几个“IF”语句将决定要替换的特定元素。不过不用担心,Suever 的第二个解决方案对我来说是理想的。谢谢!
  • @J.H.Bonarius,确实很奇怪的组合,但它确实起到了作用。

标签: matlab cell-array


【解决方案1】:

您可以创建一个包含所有 NaN 的新数组,然后将第三个元素替换为初始元胞数组中的值

B = num2cell(nan(size(A));
B(3) = A(3);

或者,您可以使用以下命令覆盖其他值:

B = A;
B([1 2 4]) = {NaN};

就单行代码而言,行数无关紧要。重要的是可读性和性能。这两件事不一定与行数相关。

【讨论】:

  • deal 不是必需的。我认为B([1:2 4:end]) = {NaN} 更好。没有?
  • @Sardar_Usama 啊,是的。如果您依赖左侧的逗号分隔值,这是必要的,但() 分配是更好的选择。谢谢
  • 非常感谢@Suever。完美运行(第二个代码更适合我)。实际上,我将单元格数组作为 p x 4 矩阵,在这种情况下,我将通过逐行遍历数组来执行某些任务。因此,我不得不将行数添加到您的代码中:[B{p, [1 2 4]}] = deal(NaN);,我很惊讶它仍然有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多