Compare rows of a column vector

Hey beautiful people,
I am confused here that i have this vector and i have to compare three values of each row and result should give the most appearing (frequent )value. It is a kind or error correction , in some rows there is one different value and two values are same which I didn't capture. Can some one help me how should i compare each row with three col values? that is how I obtained that by this code.
vec= ones(1024, 1);
ex=[1 1 1];
ex_vec=vec.*ex;
b_w_img--watermarked image
b_img--host image
for k = 1 : numel(b_img)
% diff = b_W_img{k}(4,2) - b_img{k}(4,2);
diff = round((b_W_img{k}(4,2)),1) -round(( b_img{k}(4,2)),1);
ex_vec(k)=diff;
end

5 Comments

Read about unique, ismember.
thanks and how it will read every row , i know i have to make a loop but don't know how to define rows?
You might not need a loop. Did you read the documentation for those two functions?
marie lasz
marie lasz on 16 Feb 2021
Edited: marie lasz on 16 Feb 2021
Not yet , because I was testing with mode function. and why I will not need a loop ? I have to insert those single value resulty in a matrix. Let me see the documentation.
Do you mean:
ex_vec(k, :) = diff;
% ^
The code
vec= ones(1024, 1);
ex=[1 1 1];
ex_vec=vec.*ex;
can be simplified to:
ex_vec = zeros(1024, 3);
Or do I oversee something?

Sign in to comment.

Answers (2)

Jan
Jan on 16 Feb 2021
Edited: Jan on 16 Feb 2021
The screenshot show the contents of ex_vec. It does not matter how you have obtained it. All you want to know is how to find rows with less then 3 equal elements. Did I understand this correctly?
not3EqElem = sum(ex_vec == min(ex_vec, [], 1)) < 3;
or
not3EqElem = ~(ex_vec(:, 1) == ex_vec(:, 2) & ex_vec(:, 2) == ex_vec(:, 3));

7 Comments

no not like that, every row contains 3 elements and i have to extract the value which appears more than 1 time and then store in the matrix. There are 1024 columns with 3 rows.
I mean like if a row has[ 0, 0,4 -0,4 ]values, then it means that I 0,4 is the most frequently appearing value and i need that result. If you know about error correction , in which sometimes one bit is flipped or one bit gives wrong value, so I am doing kind of that thing.
That appear more than one time, considering each row individually? What do you want to do if the entries in a given row are unique?
yes i want to consider/compare each row individually and then will apply the condition that if it is 0,4 then the bit will be zero else will be 1 .
like the concept of mode in which we take value which has more frequency /repetition. a=1 1 2;
mode=1
Why is 0.4 the most frequent value in [ 0, 0,4 -0,4 ] ? Do you mean [0, 0.4, 0.4] or should the sign be ignored?
If mode() satisfies your needs, using this command would be athe best idea.
yes I meant that [0, 0.4, 0.4]. but don't know how it will read row wise.

Sign in to comment.

Just like most functions like it, mode allows you to specify the dimension to operate on:
A= [0, 0.4, 0.4;...
1, 1, 0];
mode(A,2)
ans = 2×1
0.4000 1.0000

Asked:

on 16 Feb 2021

Answered:

Rik
on 17 Feb 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!