Dear All, I have an N-D array A (sometimes called hyperarray) with n dimensions, where n is a parameter a priori unknown since it is, for instance, an input argument of a function. So in conceptual form each element is A(k1, k2, k3, ..., kn) I'm looking for an elegant way to extract all elements with a given index over a given dimension, for instance A(:, k2, :, ..., :) This would mean to get an hyperarray made up of the k2-th column of all remaining dimensions. If extraction could be performed replacing the indexes by a list, for instance L = list(), for i=1:n L($+1) = 1:size(A)(i); end L(2) = 1 Then A(L) would work, but the result is an error message "Invalid index". The only way a list is accepted as multidimensional index is that all except the first member are 1. Thanks, Federico Miyara _______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users |
Samuel GOUGEON |
Le 20/01/2020 à 09:18, Federico Miyara
a écrit :
A(L(:)) should do it. _______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users |
Samuel, Thanks VERY much! It certainly does the job, but I don't quite understand how. For example, to retrieve the last columns of all dimensions: A = matrix(1:120, [5,4,2 3]); L = list(); for i=1:length(size(A)) L($+1) = 1:size(A)(i); end L(2) = size(A)(2); B = A(L(:)); B is exactly the desiredresult. But when I try to see what is L(:) I get --> L(:) ans = 1. 2. 3. 4. 5. and --> A(ans) ans = 1. 2. 3. 4. 5. If I try to assign L(:) to a variable I get --> u=L(:) Can not assign multiple value in a single variable So I attempt --> [u1,u2,u3,u4] = L(:) and get u4 = 1. 2. 3. u3 = 1. 2. u2 = 4. u1 = 1. 2. 3. 4. 5. However disp(L(:)) yields 1. 2. 3. 1. 2. 4. 1. 2. 3. 4. 5. I would like to understand what's going on. Regards, Federico Miyara On 20/01/2020 05:29, Samuel Gougeon
wrote:
_______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users |
Samuel GOUGEON |
Le 21/01/2020 à 00:54, Federico Miyara
a écrit :
// or
Yes, it's a bit tricky: L(:) extracts all L components, but there is no LHS recipient except the invisible ans. Then, only ans is assigned, to L(1). Other L(2:$) are ignored.
.../...
This is somewhat reported here: http://bugzilla.scilab.org/14372
This is described on https://help.scilab.org/docs/6.0.2/en_US/brackets.html
(a,b,c) is the smart Scilab "deal()" operator: [a, b, c] = (3, 1, -2) --> [a, b, c] = (3, "Hi", -2) Regards
_______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users |
Samuel, Thank you for your very informative answer. Regards, Federico Miyara On 23/01/2020 21:31, Samuel Gougeon
wrote:
_______________________________________________ users mailing list [hidden email] http://lists.scilab.org/mailman/listinfo/users |
Free forum by Nabble | Edit this page |