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
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
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