Inserting 0s in rows of an array
2 views (last 30 days)
Show older comments
Alberto Acri
on 18 Jul 2023
Commented: Dyuman Joshi
on 18 Jul 2023
Hi. I have a matrix A1 and a vector B1.
If I have a 0 in any row of vector B1, I need to insert 0s in that same row of matrix A (see picture).
With this code the 0s are applied only to the first row of A. How come?
A1 = importdata("A1.mat");
B1 = importdata("B1.mat");
rows_B1 = height(B1);
for C = 1:height(rows_B1)
if B1(C) == 0
t1 = 0;
t2 = 0;
A1(C,1) = t1;
A1(C,2) = t2;
end
end
0 Comments
Accepted Answer
Dyuman Joshi
on 18 Jul 2023
Edited: Dyuman Joshi
on 18 Jul 2023
"With this code the 0s are applied only to the first row of A. How come?"
In your code, you have already defined rows_B1 to be the height of B1. That will return a scalar value.
rows_B1 = height(B1);
When you use height on rows_B1, it will just return 1 (because it is a scalar), and your loop will go from 1 to 1 i.e. only the 1st row.
for C = 1:height(rows_B1)
Correct your code as follows -
%Corrected
for C = 1:rows_B1
A better approach would be indexing -
%Sample data
A1 = [309 126; 310 126; 289 309; 209 309;291 309];
B1 = uint8([0 0 68 70 72])';
%Comparing values of B1 to 0
idx = B1==0
%Assigning all columns of corresponding rows to be 0
A1(idx,:) = 0
2 Comments
Dyuman Joshi
on 18 Jul 2023
%Sample data
A1 = [309 126; 310 126; 289 309; 209 309;291 309];
B1 = uint8([0 0 68 70 72])';
%Comparing values of B1 to 0
idx = B1==0
%Assigning all columns of corresponding rows to be 0
A1(idx,:) = 0
%Removing the rows where rows in A are zeros is same as
%getting the rows where B1 is not equal to zero
A1_n = A1(~idx,:)
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!