2016-03-26 23 views
0

Ben alanlaralan girişi bağlı yapı dizisi Matlab'de tüm satırları sil

latency 
duration 
channel 
bvtime 
bvmknum 
type 
code 
urevent 

ben tüm satırları silmek istediğiniz alan EEG.event.type giriş = 'sınır ile 1x1008 yapı dizisi EEG.event var bir noktada sayım değişken buzunluğunu aştığı

for b = 1:length(EEG.event) 

    if strcmp(EEG.event(b).type, 'boundary') 
     EEG.event(b) = []; 
    elseif strcmp(EEG.event(b).type, 'R 1') 
     EEG.event(b) = []; 
    end 

end 

Bu, elbette çalışmaz: 'veya 'R1'

aşağıdaki döngü çalıştı.

Belirli satırların nasıl silineceği konusunda bir fikri olan var mı?

cevap

0

Yapmakta olduğunuz temel sorun, geçiş yapmaya çalıştığınız aynı yapı dizisini değiştirdiğinizdir. Bu genellikle kötü bir fikirdir ve gördüğünüz meseleye yol açacaktır.

Bunu yapmanın en kolay yolu aslında bir hücre dizisine bütün yapılar arasında event.type alanlarını dönüştürmek ve aynı anda sen girdileri almak için EEG.event içine endeks için kullanabileceğiniz bir mantıksal matris oluşturmak için hepsinin üzerinde strcmp kullanmaktır önemsiyorsun.

Sen Ardından 'sınır'

isBoundary = strcmp(types, 'boundary'); 

olay türleri arayarak mantıksal dizi oluşturmak bu

types = {EEG.event.type}; 

gibi bir cep dizideki type tüm değerleri koymak Ve alt kümesini elde edebilirsiniz gibi EEG.event girişleri.

boundaryEvents = EEG.event(isBoundary); 

tipi 'sınır' veya 'R1' olmadığı da olayların bir alt kümesini istiyorsanız, o zaman söz konusu alt grubun bu şekilde elde edebilirsiniz.

isBoundary = strcmp(types, 'boundary'); 
isR1 = strcmp(types, 'R 1'); 

% Keep the entries that aren't boundary or R1 types 
events_to_use = EEG.event(~(isBoundary | isR1)); 
0
ilk sonuna doğru elemanları silme, dizi boyunca geriye doğru yineleme için döngü değiştirin

:

for b = length(EEG.event):-1:1 
    ... 
0

Teşekkür herkes için cevap!

Bu kod yalındır çizgi işi yapar

:

[ EEG.event(strcmp('boundary', { EEG.event.type }) | strcmp('R 1', { EEG.event.type })) ] = []; 

Şerefe!

İlgili konular