Birçok fonksiyonları gibi erişim değerlerine K boyutları kolu döngü yapmak isteyen kalmamasıdır. Bununla birlikte, diğerleri, bunun yerine N argümanlarını geçirmenizi gerektirir.
octave> M = randi (9, 3)
M =
2 9 4
5 9 5
2 6 4
octave> ind = sub2ind (size (M), [2 1], [1 2]) # sub2ind (dims, rows, cols, 3rd_dim, 4th_dim, ...)
ind =
2 4
octave> M(ind)
ans =
5 9
N boyutlarını ele ana hüner comma separated lists (cs-lists) anlamaktır ve nasıl get them from cell arrays yapabilirsiniz: İşte size özgü sorunu çözmek için gereken sub2ind
davası (doğrusal endeksleri içine indis indeksleri dönüştürmek) 'dir. sizinki gibi bir 2D örneği kullanarak (ancak v1
ve v2
saçma görmezden --- her satır bir nokta bir matris v
kullanmalı ve her sütun bir boyuttur), yapabileceğiniz:
octave> v = [2 1; 1 2];
octave> ind = sub2ind (size (M), num2cell (v, 1){:})
ind =
2
4
octave> M(ind)
ans =
5
9
sadece
octave> num2cell (v, 1) # returns a cell array
ans =
{
[1,1] =
2
1
[1,2] =
1
2
}
octave> num2cell (v, 1){:} # transform the cell array into a cs-list
ans =
2
1
ans =
1
2
Ve gerçekten N boyutlarını ele geçirmek için kullanabilir: yukarıdaki örnekte izah edilmesi gerektiğinde şeydir
octave> M = rand (9, 5, 5, 5, 5, 5);
octave> v = [5 5 5 5 5; 1 2 3 4 5; 3 2 4 4 1];
octave> ind = sub2ind (size (M), num2cell (v, 1){:});
octave> M(ind)
ans =
0.13726
0.14020
0.78660
octave> [M(5, 5, 5, 5, 5); M(1, 2, 3, 4, 5); M(3, 2, 4, 4, 1)]
ans =
0.13726
0.14020
0.78660
[kullanmak ' sub2ind' (http://octave.sourceforge.net/octave/function/sub2ind.html) işlevi – Dan
'' nı '' kullanarak '' n '' düzelmediyse yeterli değildir. For döngüsü olmadan 'n' işlemek için hile, daha sonra virgülle ayrılmış bir liste oluşturmak için kullanılabilecek bir hücre dizisi oluşturmaktır. – carandraug
@Dan Bir vektörü nasıl argüman olarak geçirirsiniz? Sub2ind() '.ie' sub2ind ([3,3], V1) 'çalışmıyor. 'V1 = [2,1] '; – shadowfox