Προς το περιεχόμενο

Συγκριση cell arrays matlab


matuser

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημερα,

Εχω δημιουργήσει δύο cell arrays A,B(1 * 100) και οι δυο και θέλω να τους συγκρίνω.

Συγκεκριμένα θέλω να έλεγξω κάθε τιμή του Α αν υπάρχει σε κάποια θέση του Β.

Στο τέλος θα πρεπει να δημιουργηθεί ένας νέος cell(result) ο οποίος θα πρέπει να έχει ακριβώς τις ίδιες διαστάσεις με

τον Α, δηλαδή θα είναι 1 * 100 και να έχει το ίδιο μέγεθος κελιών με τον Α και θα εχει τιμή 1 αν στην συγκιμενη θεση υπαρχει η τιμή και 0 αν δεν υπαρχει. Τρέχω τον εξής κώδικα:

 

result=cell(1,100);

for k = 1:100

result{k}=zeros(size(A{1,k},1),1);

for j=1:size(A{1,k},1)

new = A{1,k};

temp=cell(1,100);

temp2=cell(1,100);

temp{k}=zeros(size(A{1,k},1),1);

for l = 1:size(B{1,k},1)

if B{1,k}(l) <= new(j) + 30 && B{1,k}(l) >= new(j) - 30 %epeidh oi times den mporei na einai tautoshmes,tsekarei se theseis gurw apo to B

temp2 = cellfun(@(x) x(x + 1), temp, 'UniformOutput',false); %%temp = temp+1;

end

result{1,k} = temp2;

 

end

end

end

 

Ενώ ο result δημιουργείται έτσι οπως θέλω δεν παιρνει τιμές.Καμια ιδέα;;

Δημοσ.

Παω να τρεξω την cell2mat αλλά βγαζει error και δεν γινεται η μετατροπη σε κανονικο πινακα.Το λάθος που βγαζει ειναι το εξής:

"CAT arguments dimensions are not consistent".

Δημοσ.

μήπως οι arrays σου έχουν διαφορετικές διαστάσεις; Μπορεί ο Α να είναι 1Χ100 και ο Β να είναι 100Χ1.

 

Ή μήπως προσπαθείς να γράψεις όλα τα αποτελέσματα από πολλούς Α και Β σε κάποιο μεγαλύτερο Array και κάποιοι έχουν διαφορετικό μέγεθος;

 

EDIT: Μήπως έχεις και strings (κείμενο) σε κάποια cells;

Δημοσ.

μήπως οι arrays σου έχουν διαφορετικές διαστάσεις; Μπορεί ο Α να είναι 1Χ100 και ο Β να είναι 100Χ1.

 

Ή μήπως προσπαθείς να γράψεις όλα τα αποτελέσματα από πολλούς Α και Β σε κάποιο μεγαλύτερο Array και κάποιοι έχουν διαφορετικό μέγεθος;

 

EDIT: Μήπως έχεις και strings (κείμενο) σε κάποια cells;

 

Και ο Α και ο Β ειναι 1Χ100 cells. Το μεγεθος των κελιων τους διαφερει δηλαδη πχ το πρωτο κελι του Β ειναι 70 Χ 1 ενω του Α ειναι 4Χ1.Τα αποτελέσματα θελω να γραφτουν σε cell ο οποιος θα είναι ακριβως ιδιος με τον Α δηλαδη θα είναι1Χ100 cell αλλα και το πρωτο του κελι θα είναι επισης 4Χ1. Επισης περιέχουν μονο αριθμους και οχι strings.Τι φταίει τελικα?

Δημοσ.

Δεν καταλαβαίνω τη δομή των δεδομένων σου.

 

Έχεις μεταβλητό αριθμό τιμών στο κάθε κελί; πχ:

 

>

A = {[1 4 3; 0 5 8; 7 2 9], -pi:pi/4:pi, 3};
disp (A)
[3x3 double]	[1x9 double]	[3]

 

Αν ναι, τότε πρέπει και ο B να έχει ακριβώς τις ίδιες διαστάσεις σε κάθε κελι του, πχ

 

>

Β = {[12 42 32; 02 52 82; 72 22 92], -4:1:4, 5};
disp (Β)
[3x3 double]	[1x9 double]	[5]

 

Αν δεν ισχύει αυτό, τότε δεν μπορείς να κάνεις σύγκριση. Δηλαδή, δεν μπορείς να συγκρίνεις δύο arrays που έχουν διαφορετικές διαστάσεις, εκτός κι αν ο ένας έχει μόνο μία τιμή μέσα, πχ 5.

 

Αν όντως σε κάθες κελί των 2 cell arrays, υπάρχει ακριβώς το ίδιο πλήθος τιμών, τότε μπορείς να κάνεις σύγκριση. Για να γίνει η σύγκριση, πρέπει να κάνεις κάτι σαν:

 

>
for i =1:3
A1 = cell2mat(A(i))
B1 = cell2mat(B(i))
C = A1==B1;
end

 

Αυτό το τελευταίο το κάνεις, διότι η cell2mat δε δουλεύει (όπως και όλες οι εντολές της matlab, νομίζω) για μεταβλητές διαστάσεις. Δηλαδή στο παράδειγμα, θα έπρεπε οι διαστάσεις του Α να ήταν όλες ίδιες, πχ 1Χ9 και στα 3 κελιά.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...