【问题标题】:MATLAB : Trim the zeros in the arrays and concatenate variable dimension columns to from a matrixMATLAB:修剪数组中的零并将可变维度列连接到矩阵
【发布时间】:2014-07-03 12:15:55
【问题描述】:

我的代码输出如下

load(1).value(1:end) = [0.0100 0.5030 0.7590 1]

load(2).value(1:end) = [0 0 0 0 1]

load(3).value(1:end) = [0 0 0 0 0 0.2000 0.4000]

但我想要

load(1).value(1:end) = [0.0100 0.5030 0.7590 1]

load(2).value(1:end) = [1]

load(3).value(1:end) = [.2000 0.4000]

如何将“从 load(2) 中出现的前导零”修剪掉,然后以 xlsx 或 csv 格式将这些数组垂直连接在一起?

csv 文件应包含:第一列中的“0.0100 0.5030 0.7590 1”,第二列中的“1”和第三列中的“.2 .4”

【问题讨论】:

  • 只是前导零?
  • 数据的列位置不重要吗?那么对于上面的例子,最后能不能编辑成你想要的csv格式呢?
  • 零与 matlab 的显示方式有关。一旦你导出到 csv,它们就会消失

标签: matlab strcat


【解决方案1】:

如果将这些值保存在中间数组中,则可以选择索引为零并删除它们。

aux=[0.0100 0.5030 0.7590 1]
aux(aux==0)=[];
load(1).value(1:end) = aux;

aux=[0 0 0 0 1]
aux(aux==0)=[];
load(2).value(1:end) = aux;

aux=[0 0 0 0 0 0.2000 0.4000]
aux(aux==0)=[];
load(3).value(1:end) = aux;

对于串联,检查vertcat(),垂直串联。

【讨论】:

    【解决方案2】:

    这是与您的数字示例相匹配的内容。虽然我觉得如果您想写入 csv 或 xls,最好在通过删除零来弄乱形状之前执行此操作。

    获取所有非零元素的简单方法:

    [~, ~, load(1).value] = find(load(1).value);
    

    【讨论】:

    • [~, ~, load(2).value(1:end)] = find(load(2).value(1:end));在赋值 A(:) = B 中,A 和 B 中的元素个数必须相同。
    • @user3734298 当我开始时无法重现这个:clear, load=struct(); load(2).value = [0 0 0 0 1] 但是,我已经稍微减少了代码,也许消除了问题的原因。
    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多