How to change 0 to 1 and update a matrix
10 次查看(过去 30 天)
显示 更早的评论
clc
clear all
close all
b1 = [10; 20 ; 30 ; 40];
A = [0 20 0 10 ; 20 0 30 0 ; 0 30 0 10 ; 20 0 10 0];
s = size(b1);
x = randi([0 1],s)
G = [];
[ n m ] = size(x);
for i = 1 : n
for j = 1 : m
G(:,i) = x(:,j)
a = find(G(: , i) == 0 , 1 , 'first')
[x y] = size(G(:,i))
for k = 1:y
G(: , k) = 0;
G(a , k) = 1
end
end
i = i + 1;
j = j + 1;
end
This prob wil work only the first time. I want the matrix to take a column, find where the first 0 is and change it to 1. Then proceed to the next line and do the same but keep the first column and not change it to 0s. Final solution must look like
x =
0
1
0
0
(x changes randomly with 0 and 1 )
G =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
I would appreciate any answer :)
采纳的回答
Andrei Bobrov
2019-6-21
编辑:Andrei Bobrov
2019-6-22
n = numel(x1);
y1 = ~x1;
% if MATLAB >= R2016b
k = y1.*eye(n);
% if MATLAB <= R2016a
k = bsxfun(@times,y1,eye(n));
out = [x1, zeros(n,n-1)];
p = find(y1);
out(:,2:numel(p)+1) = k(:,p);
4 个评论
Andrei Bobrov
2019-6-22
You use old MATLAB.
Replace this expression with the following:
k = bsxfun(@times,y1,eye(n));
更多回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!