MATLAB索引-仅更改特定列中的非零元素

MATLAB索引-仅更改特定列中的非零元素,matlab,indexing,Matlab,Indexing,如何仅更改10x10数组前5列的非零值 第一种选择是选择要更改的列并使用二进制索引: 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 我发现您已经接受了正确的答案,因此我将仅为文档添加一行和

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

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

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

我发现您已经接受了正确的答案,因此我将仅为文档添加一行和一个变量的解决方案,如果有人觉得它更合适的话:

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

对于@m7913d注释,可以使用n1至n2列的更通用解决方案-

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

谢谢,但我只想更改前5列,也不想更改零元素,而是更改非零元素。我错过了第一列,但我更改了我的答案。很好的一行解决方案。请注意,此解决方案仅适用于前n行。对于要将列n1更改为n2的稍微不同的问题,结果将不正确。@m7913d您完全正确。我根据更一般的情况编辑了我的答案