Size( ,k) of one-dimensional array for k >1

v1 = rand(5);

size(v1) # returns (5,)

size(v1, 1) = 5 # fine
size(v1, 2) = 1 # ?
size(v1, 3) = 1 # ??
...
size(v1,100) = 1 # ? ... ?

I think I would have expected size(v1, k) for k > 1 to be 0, not 1. Is this intended behavior? Perhaps it has the potential to mislead. Is there some other design consideration I’m ignoring? The problem arose for me because I did the following:

l, w = size(v1) # I expected (1,0)
ERROR: BoundsError: attempt to access (5,)
  at index [2]

I’d justify this by saying that the number of elements in an array A should always be prod(size(A)) – as soon as size(A, i) returns 0 for some i you’d get an empty array.

Your original problem should be written as

l, w = size(v1, 1, 2)

which is explicit about the dimensions you care about.

1 Like

That is indeed a good reason. Thanks. It’s a little weird to get non-zero sizes for other dimensions in an empty array! But I see your larger point.

size([])
   (0,)

size([], 1, 2,3) 
   (0,1,1)

Your suggestion is what I ended up doing.

Thanks for your reply!