Swaping data from 3 different columns in MATLAB
1 次查看(过去 30 天)
显示 更早的评论
Hi All
I have a 4728 by 12 matrix consisting of numerical data.I want to swap elements
from column 2,6 and 10 based on condition.
I want to search element 133 in three columns and thus many if and else condition is
coming up.If 133 is not there in any of three column retain 10 in its position. I have done it but it is not efficient because when it was showing error
I was checking the indices and changing the code accordingly . But i want to swap only when the condition is met and by not looking into the array.
My code is like this . In 2nd elseif condition I know 10 is in 6th column and 133 is not present in 2nd
and 10 the column and then I have swap the element of the column. I want to search and
replace from programming.
fmd=fopen('Onlysvid-133.txt','w');
for j=1:length(line)
if(line(j,2)==10 & line(j,6:4:end)~=133)
line(j,2)=line(j,2);
elseif(line(j,2)==133 & line(j,6:4:end)~=133)
line(j,2)=line(j,2);
elseif(line(j,6)==10 & line(j,2:8:end)~=133)
line(j,[2,6])=line(j,[6,2]);
elseif(line(j,2)==10 & line(j,6:4:end)==133)
line(j,[2,10])=line(j,[10,2]);
else(line(j,10)==133 & line(j,2:4:end-1)~=133)
line(j,[2,10])=line(j,[10,2]);
end
fprintf(fmd,'%d\n',line(j,2));
end
fclose(fmd);
% I am failing to implement in below portions of Inputfile contents(4th line)
15 10 0 0 13 10 0 0 14 10 0 0
15 10 0 0 13 10 0 0 14 10 0 0
15 10 0 0 13 10 0 0 14 87 0 0
15 134 0 0 13 10 0 0 14 132 0 0
Thanks
0 个评论
采纳的回答
Akira Agata
2017-8-12
编辑:Akira Agata
2017-8-12
If my understanding is correct, the following code will achieve what you want to do.
% Sample 4728x12 numeric array
A = randi([130,140], 4728, 12);
% Find the row where 2nd or 6th or 10th column is 133
idx = any(A(:,[2,6,10]) == 133, 2);
% Then, replace the 2nd, 6th and 10th column of the other rows to 10
A(~idx, [2,6,10]) = 10;
2 个评论
Akira Agata
2017-8-12
Hi Poka-san.
First of all, I found typo in my answer, so I've just corrected.
Regarding your additional comment, let me clarify your points.
> My reference column is 2nd column.
If you want to find the rows where 2nd column is 133, then you can do by:
idx = A(:,2) == 133;
But I'm not clearly catching what you want to do for this identified rows.
> if either in 6th or 10th column 133 is present how to replace it corresponding data of 2nd.
This can be done by the following:
idx = any(A(:,[6,10]) == 133, 2);
A(idx,[6,10]) = [A(idx,2), A(idx,2)];
I hope this will help!
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!