Soru sorTekrarlı Bir Matlab Dizisinde Tekrar Sayısını Bulmak
beyzaac tarafından 5 yıl önce soruldu

Merhablar, öncelikle kolay gelsin.
Her bir elemanı 1000'den küçük n elemanlı bir dizide tekrar eden elemanları ve kaç kere tekrar ettiğini bulan kod nasıl yazabiliriz?
Örnek olarak; 4,892,10,4,892,4,12,4…
4 tekrar sayısı 4
892 tekrar sayısı 2
Şimdiden çok teşekkürler.

2 Cevap
En iyi cevap
Caglar Yönetici tarafından 5 yıl önce cevaplandı

Merhaba,
Güncel bir matlab sürümü varsa, groupcounts bunu ve daha fazlasını daha kısa kodla yapabilir. Vektörünüzün dik olması lazım, o yüzden sonuna ' (transpose) ekledim.

dizi = [4,892,10,4,892,4,12,4]';
groupcounts(table(dizi),1)
ans =
4×2 table
dizi GroupCount
____ __________
4 4
10 1
12 1
892 2
malikecebas tarafından 5 yıl önce cevaplandı

Merhabalar,
Aşağıdaki şekilde yaptım. Kodu çalıştırıp inceleyerek nasıl çalıştığını da anlayabilirsin. Yorumlar ekledim.

clear all; clc; close all;
store =[4 892 10 4 892 4 12 4 32 65 32 67 32];
count =0;
for ii =1:length(store) % Store dizin'ini geziyorum

num =store(ii); % Dizinin bu adımdaki değeri

[~,c] =size(find(store==num)); % Find komutu ile bu dizin içerisinde 'num' değerinin kaç tane olduğunu buluyorum

if (c ~=1) % c değeri 1'e eşit değilse bu demektir ki bu dizinde 'num' değeri 1'den fazla defa tekrarlanmış.

count =count+1; % Depolamak için bu şart her sağlandığında sayıyorum.
repInd(count) =ii; % Dizin'in kaçıncı elemanında 'num' değerini bulduğumu depoladım.
repNum(count) =num; % Hangi değer tekrar ediyor
repCount(count) =c; % Kaç kere tekrar ediyor
end

end
[un,r] =unique(repNum,'stable'); % Yukarıdaki döngüde tekrar eden sayıları her seferinde depoluyor. Aynı sayıyı tekrar tekrar depoluyorum.
% Unique komutu ile dizinlerdeki tekrarları eliyorum.
unRepInd =repInd(r);
unRepNum =repNum(r); % Tekrar eden değerlerin listesi 
unRepCount =repCount(r); % Kaç kere tekrar ettikleri