MATLAB Matrix'ten Sadece Belirli Sıfırları Kaldır

Önde gelen ve/veya sondaki sıfırları nasıl kaldıracağınıza ve bir vektör veya matristeki tüm sıfırları nasıl kaldıracağınıza dair birçok yanıt gördüm. Yapmam gerekeni, ancak, bazılarını kaldırmaktır. İki matrisim var ve sadece ikisinin de sıfır olduğu girişleri kaldırmak istiyorum. Bunlar iki boyutlu x ve y koordinatlarıdır, karakteristikler kullanılarak çözülürler (gerekirse daha fazla ayrıntı verebilirim) ve sadece her iki matrisin aynı indekslerde sıfırları içerdiği değerleri kaldırmak istiyorum. Matrisleri kolayca vektörlere dönüştürebilirim ve vektörlerle çalışabilirim, bu yüzden her iki durumda da herhangi bir yardım büyük ölçüde takdir edilecektir.

1
Sorunun amacı budur. Ben dx/ds = u, dy/dx = v, dc/ds = - \ theta g (c) çözüyorum ve ben parametrization boyunca u ve v değerleri olsun, böylece 2 sonra interpolasyon kullanıyorum ve ileri Euler kullanarak y değerleri. Yine de, her bir başlangıç ​​noktası için x ve y vektöründeki eleman sayısı değişir. Belirli bir satırda atanmayan fazladan boşluklara sadece 0 değeri verilir. C = 2 de (x, y) = (0,0) iken, c = 0 (= 0) = 0, yani c (0) = 0 anlamına gelen girişler alacağım. , 0) = 0. Aşağıdaki iki yöntemi de deneyeceğim ve hangisinin en iyi olduğunu göreceğim. Teşekkürler.
katma yazar Jeff, kaynak
Bir 2D matrisinin ortasındaki öğeleri nasıl kaldırmayı düşünüyorsunuz?
katma yazar Oliver Charlesworth, kaynak

1 cevap

Basitlik adına, X ve Y (aynı uzunlukta) denen vektörleri kullandığınızı varsayalım ve yalnızca her iki vektörün de bu girişleri kaldırmak istiyorsunuz. sıfır. İşte nasıl (test edilmemiş):

% Find the indexes where either X or Y is different from zero
% (these are the indexes of the components we want to keep)
I = find(X~=0 | Y~=0);

% Select the desired components from X and Y
X=X(I);
Y=Y(I);

Düzenleme: Oli'nın aşağıda belirttiği gibi (ve stefano daha fazla açıkladı), daha iyi performans için mantıksal indeksleme kullanmalısınız.

5
katma
@MartinB - ana fayda bulmak işlevini atlıyor. Bu genellikle kodun takip edilmesini kolaylaştırır.
katma yazar eykanal, kaynak
Yardımınız için teşekkürler, herkes. Oli'nın mantıksal indeksleme ile önerdiği şeyi kullandım ve bu harika. Çok teşekkürler.
katma yazar Jeff, kaynak
Temizleyici: I = (X == 0 & Y == 0); X (I) = []; Y (I) = []; yani mantıksal indeksleme kullanarak.
katma yazar Oliver Charlesworth, kaynak
@Oli: Dürüst meraklı - nasıl bu temizleyici, yani avantajları nelerdir?
katma yazar Martin B, kaynak
@stefano: Teşekkürler - bunun farkında değildi!
katma yazar Martin B, kaynak
@MartinB - sadece temizleyici değil, fakat eğer X yazıyorsanız (Bul (Y == bir şey)), matlab editörü, 'find' işlevini kaldırarak bunu düzeltmenizi önerir: “Performansı iyileştirmek için mantıksal indeksleme kullanın. FIND yerine "
katma yazar stefano, kaynak