'Logical' function to read 2 variables and output to a new variable
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hello Community,
I am having a novice moment here - difficulty in organising my function to do what I want. In short, I am trying to:
1. Read the data in 'a', AND
2. Read the data in 'b'
3. When they agree with the terms (a basic logical test)
4. A numerical count is recorded in the appropriate row/column of 'Imloc'
Example, if a(:,1) & b(:,1) == '1', then in IMloc(1,1) a count is recorded (or nothing if not). If a(:,2) & b(:,1) == '1' a count would be recorded at Imloc(1,2) etc.
Here is what code I have:
function [ Imloc ] = IMLocation( a, b )
% Preallocate Imloc matrix with zeros
Imloc = zeros(1,11);
% Set counter
numout = 0;
% Create storage for output vector
outvec = [];
% Run for the length of
for k=1:length(a,b)
if a(k)==1 && b(k)==1
numout = (numout + 1), 'Imloc',(1:1))
Imloc(outvec(numout))
elseif a(k)==2 && b(k)==1
numout = (numout + 1) 'Imloc',1:2))
Imloc(outvec(numout))
elseif a(k)==3 && b(k)==1
numout = (numout + 1) 'Imloc',1:3))
Imloc(outvec(numout))
% etc. etc. etc.
elseif a(k)==11 && b(k)==1
numout = (numout + 1) 'Imloc',1:11))
Imloc(outvec(numout))
else
end
end
So, can anyone make a suggestion as to what is going wrong as I am not doing very well with this!
Regards,
10B.
3 Commenti
Risposta accettata
dpb
il 29 Set 2015
Sorry, I didn't see the previous response. Your dataset isn't complete, but presuming it is, then
d=a(b==1); % only the 1's count...
u=unique(d); % the unique values that are in a
n=hist(d,u); % count for each possible bin
Your header row or whatever is simply the vector u with the 'm' appended if want (altho you'll then have to use a cell array to hold both datatypes together, of course)...
>> cellstr(num2str(u,'%dm')).'
ans =
'1m' '2m' '5m' '6m'
>>
for the above (partial) dataset...
2 Commenti
dpb
il 29 Set 2015
Modificato: dpb
il 2 Ott 2015
You're welcome, of course. Was why was checking for sure on what the actual objective was, first...I thought this was likely the question initially, but wasn't positive so figured may as well solve the question asked...
ADDENDUM
Of course, if the data are complete in the real case, accumarray works wonders here...
>> accumarray(a,b).'
ans =
2 3 0 0 1 1
>>
See the doc for details. This relies on the b vector being [0,1] so the sum is therefore identical to the count of nonzero elements.
As you see, this gives entries in the final array for each element at the index position where as the unique|hist solution only returns those actually found.
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!