@@ -369,7 +369,10 @@ function rand{T<:Integer, U<:Unsigned}(g::RandIntGen{T,U})
369
369
end
370
370
371
371
rand {T<:Union(Signed,Unsigned,Bool,Char)} (r:: UnitRange{T} ) = rand (RandIntGen (r))
372
- rand {T} (r:: Range{T} ) = r[rand (1 : (length (r)))]
372
+
373
+ # Randomly draw a sample from an AbstractArray r
374
+ # (e.g. r is a range 0:2:8 or a vector [2, 3, 5, 7])
375
+ rand (r:: AbstractArray ) = @inbounds return r[rand (1 : length (r))]
373
376
374
377
function rand! (g:: RandIntGen , A:: AbstractArray )
375
378
for i = 1 : length (A)
@@ -380,16 +383,19 @@ end
380
383
381
384
rand! {T<:Union(Signed,Unsigned,Bool,Char)} (r:: UnitRange{T} , A:: AbstractArray ) = rand! (RandIntGen (r), A)
382
385
383
- function rand! (r:: Range , A:: AbstractArray )
386
+ rand! (r:: Range , A:: AbstractArray ) = _rand! (r, A)
387
+
388
+ # TODO : this more general version is "disabled" until #8246 is resolved
389
+ function _rand! (r:: AbstractArray , A:: AbstractArray )
384
390
g = RandIntGen (1 : (length (r)))
385
391
for i = 1 : length (A)
386
392
@inbounds A[i] = r[rand (g)]
387
393
end
388
394
return A
389
395
end
390
396
391
- rand {T} (r:: Range {T} , dims:: Dims ) = rand ! (r, Array (T, dims))
392
- rand (r:: Range , dims:: Int... ) = rand (r, dims)
397
+ rand {T} (r:: AbstractArray {T} , dims:: Dims ) = _rand ! (r, Array (T, dims))
398
+ rand (r:: AbstractArray , dims:: Int... ) = rand (r, dims)
393
399
394
400
# # random BitArrays (AbstractRNG)
395
401
0 commit comments