【问题标题】:MATLAB Indexing - Changing only nonzero elements from specific columnsMATLAB 索引 - 仅更改特定列中的非零元素
【发布时间】:2017-03-13 20:45:37
【问题描述】:

如何仅更改 10x10 数组的前 5 列的非零值?

【问题讨论】:

    标签: matlab indexing


    【解决方案1】:

    第一种选择是选择要更改的列并使用二进制索引:

    A = round(rand(10, 10));
    B = A(:, 1:5);
    B(B ~= 0) = 10;
    A(:, 1:5) = B
    

    第二种选择是使用如下掩码:

    A = round(rand(10, 10));
    mask = zeros(size(A));
    mask(:, 1:5) = 1;
    A(A~=0 & mask) = 10
    

    【讨论】:

    • 谢谢,但我只想更改前 5 列,而不是零元素,而是非零元素。
    • 我第一次错过了,但我改变了答案。
    【解决方案2】:

    我看到你已经接受了正确的答案,所以我将只为文档添加一个带有一行和一个变量的解决方案,如果有人会觉得它更舒服:

    A((A(:,1:5))~=0)=10
    

    编辑:

    对于@m7913d 评论,列 n1 到 n2 的更通用解决方案可以是-

    A((n1-1)*size(A,1)+find(A(:,n1:n2)~=0))=10
    

    【讨论】:

    • 不错的单行解决方案。请注意,此解决方案仅适用于前 n 行。对于您要将列 n1 更改为 n2 的略有不同的问题,结果将不正确。
    • @m7913d 你完全正确。我编辑了我对更一般情况的回答
    猜你喜欢
    • 2014-04-30
    • 2023-04-09
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多