Aligning columns in a matrix by padding with zeros
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have a matrix A below. The values in each column are all roughly 100 apart, but some of them are missing some values. They represent loci of peaks in a graph. I want to make a matrix B that puts the zeros where they need to be: where a value in a column is "skipped"
1698 1696 1699
1826 1819 1816
1928 1921 1921
2063 2065 2059
2184 2186 2181
2399 2278 2270
2544 2373 2373
2655 2449 2555
2792 2552 2652
0 2657 2796
0 2794 0
e.g. column 1 should be
1698
1826
1928
2063
2184
0
2399
0
2544
2655
2792
2 Commenti
Risposta accettata
Stephan
il 21 Ago 2020
Under the assumption that you have at least one not corrupted column (here column 2), this might work:
A = [1698 1696 1699
1826 1819 1816
1928 1921 1921
2063 2065 2059
2184 2186 2181
2399 2278 2270
2544 2373 2373
2655 2449 2555
2792 2552 2652
0 2657 2796
0 2794 0]
non_corrupt_col = 2;
b = fix(A/100) - fix(A(:,non_corrupt_col)/100);
while sum(b==1,'all') ~=0
b = fix(A/100) - fix(A(:,non_corrupt_col)/100);
[r,c] = find(b==1,1);
A(r+1:size(A,1),c) = A(r:size(A,1)-1,c);
A(r,c) = 0;
end
disp('result:')
A
Results in:
result:
A =
1698 1696 1699
1826 1819 1816
1928 1921 1921
2063 2065 2059
2184 2186 2181
0 2278 2270
2399 2373 2373
0 2449 0
2544 2552 2555
2655 2657 2652
2792 2794 2796
0 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!