2016-03-29 32 views
0

5 matris içeren bir hücre dizilim (C) var. Her matris vektörlerinin farklı kümesini temsil eder (yani, her bir matris iki sütun içeren bir tane olan x koordinatı;.. Y koordinatı diğer değişen bir satır sayısı vektörlerin sayısına bağlıdır) Bu durumdaMATLAB'da bir hücre dizisinde nokta ürünü nasıl yapılır?

C{1} = [20x2 double]; 
C{2} = [23x2 double]; 
C{3} = [32x2 double] ... 

vardır, C {1} cinsinden 20 vektör; C {2} içinde 23 vektör vb. Her matris için iki bitişik vektörün nokta ürününü yapmak için herhangi bir yol var mı?

C{1} = [2,3; 1,2; 5,4; 8,3; ...] 

böylece [2,3] o & [1,2] [1,2] & [5,4] o [5,4] & [8,3] ve nokta ürün hesaplamak . Sonuç olarak, 5 hücreli bir hücre dizisi almayı beklerdim. Sonuç olarak, 5 hücreli bir hücre dizisi elde etmeyi beklerdim. Her hücre bir [n-1,1] dizisidir (n, matrisin uzunluğudur).

dots = [5x1 cell]. 
dots{1} = [19x1 double]; 
dots{2} = [22x1 double]; 
dots{3} = [31x1 double] ... 

cevap

0

Her koordinat (satırındaki) arasındaki nokta ürününü hesaplamak için cellfun kullanabilir ve sonraki koordinat (satır).

dots = cellfun(@(x)dot(x(1:end-1,:), x(2:end, :), 2), C, 'uniform', 0) 

Açıklama Biz x(1:end-1,:) kullanarak karşılaştırmak için ilk satırları kapmak ve sonra sonraki sıranın x(2:end,:) ile nokta ürününü gerçekleştirmek istiyoruz. Nokta ürününü gerçekleştirirken, nokta boyutunun ikinci boyut boyunca olmasını istediğimizi belirtmek isteriz, böylece üçüncü giriş için 2 değerini dot'a veririz.

dp = dot(C{1}(1:end-1,:), C{1}(2:end,:), 2); 

Her hücre dizi elemanı bu gerçekleştirmek için cellfun kullanın.

Örnek

C = {rand(10,2), rand(20,2), rand(30,2), rand(40, 2), rand(50,2)}; 
dots = cellfun(@(x)dot(x(1:end-1,:), x(2:end, :), 2), C, 'uniform', 0) 

    [9x1 double] [19x1 double] [29x1 double] [39x1 double] [49x1 double] 
+0

teşekkürler. Ama bu bana her matris için bir nokta ürün verecek ve bir nx1 vektörü ile sonuçlanacak (n, hücre dizisinin uzunluğudur). Benim durumumda, nokta ürününü bir seferde 4 eleman yapmak istiyorum. Böylece, eğer C {1} = [20x2 double], bir [19x1 double] dizisi elde etmeyi beklerdim. –

+0

@JameeLin Ok yanıtı bunun için hesaplanır. Umarım şimdi beklendiği gibi çalışır. – Suever

+0

Bu çalışır! Çok teşekkür ederim!! –