|
From: | Daniel J Sebald |
Subject: | Re: sort indexing |
Date: | Mon, 15 Feb 2016 15:10:28 -0600 |
User-agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111108 Fedora/3.1.16-1.fc14 Thunderbird/3.1.16 |
On 02/15/2016 02:39 PM, Doug Stewart wrote:
I have a question about indexing. a=randi(9,5) [b i]=sort(a) c=a(i) I would think that c should be the same as b, but it is not. The index array i has all the correct information in it as can be seen with for k=1:columns(a) w(:,k)=a(i(:,k),k); endfor now b-w is equal to 0 Is there some technical reason that if you try and use the index array i on an matrix of the same dimensions, that it can't work? I would think that it should apply each col of the i to a in a(i) as I did in the loop. I know it can be vectorized: a(sub2ind (size(a), i, repmat(1:4, rows(a), 1))) a(i+(0:columns(a)-1)*rows(a)) but I just think that octave should be smart enough to just do a(i) Doug
Doug, I looks like a() is being vectorized when accessed as a(i): octave:1> a = [0:4] + 5*[0:4]' a = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 octave:2> i = a + 1 i = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 octave:3> a(i) ans = 0 5 10 15 20 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24The Octave documentation states that indexing multidimensional arrays when indexed by a scalar are treated in column-major order. Hence in the above example because of the way I defined i, a(i) is transposed.
https://www.gnu.org/software/octave/doc/interpreter/Index-Expressions.html Dan
[Prev in Thread] | Current Thread | [Next in Thread] |