@@ -1038,18 +1038,25 @@ end
1038
1038
1039
1039
## subarrays ##
1040
1040
1041
- type SubArray{T ,N ,A < : AbstractArray,I < : (Indices ... )} < : AbstractArray{T ,N }
1041
+ type SubArray{T ,N ,A < : AbstractArray,I < : (AbstractVector ... )} < : AbstractArray{T ,N }
1042
1042
parent:: A
1043
1043
indexes:: I
1044
1044
dims:: Dims
1045
1045
1046
1046
SubArray (p:: A , i:: I ) = new (p, i, map (length, i))
1047
1047
end
1048
1048
1049
- sub{T ,N }(A :: AbstractArray{T ,N }, i:: NTuple{N ,Indices }) =
1049
+ sub{T ,N }(A :: AbstractArray{T ,N }, i:: NTuple{N ,AbstractVector }) =
1050
1050
SubArray{T ,N ,typeof (A ),typeof (i)}(A , i)
1051
1051
1052
- sub (A :: AbstractArray, i:: Indices... ) = sub (A , i)
1052
+ #change integer indexes into Range1 objects
1053
+ sub (A :: AbstractArray, i:: Indices... ) =
1054
+ sub (A , ntuple (length (i), j - > isa (i[j],AbstractVector) ? i[j] :
1055
+ (i[j]: i[j])))
1056
+
1057
+ sub (A :: SubArray, i:: Indices... ) =
1058
+ sub (A .parent , ntuple (length (i), j - > isa (i[j],AbstractVector) ? A .indexes [j][i[j]] :
1059
+ (A .indexes [j][i[j]]): (A .indexes [j][i[j]])))
1053
1060
1054
1061
size (s:: SubArray) = s .dims
1055
1062
ndims{T ,N }(s:: SubArray{T ,N }) = N
0 commit comments