If you really want a 3d matrix and not a 2d array containing arrays, I
would have tried this :
arrayLength = 10 ;
matrixCol = 10;
matrixSlices= 10;
function arrayTest(arrayLength,i,j)
singleArray = ones(1,arrayLength)*(i+j); #each array has a unique value
i+j
return singleArray
end
matrix3d = [arrayTest(arrayLength,i,j)[k] for k=1:arrayLength, i=1:matrixCol,
j=1:matrixSlices ];
matrix3d[:,1,1]
Le lundi 24 mars 2014 19:25:56 UTC+1, Keith Campbell a écrit :
>
> This runs fine for me, running Version 0.3.0-prerelease (2014-02-28 04:44
> UTC):
>
> f(i,j) = [i,j]
> n=3; m=2
> a = [f(i, j) for i in 1:n, j in 1:m]
>
> Out[91]:
>
> 3x2 Array{Any,2}:
> [1,1] [1,2]
> [2,1] [2,2]
> [3,1] [3,2]
>
> On Monday, March 24, 2014 10:07:49 AM UTC-4, Linus Mellberg wrote:
>>
>> Hi!
>>
>> I'm trying to construct a 3 dimensional array from a number of 1
>> dimensional arrays. Essentially what i would like to do is
>>
>> a = [f(i, j) for i in 1:n, j in 1:m]
>>
>> where f(i, j) is a function that returns an array (note, f has to
>> construct the entire array at the same time). The code above creates a
>> 2-dimensional array of arrays, but I would like to get a 3-dimensional
>> array with the arrays returned by f in the first dimension with i and j in
>> the second and third dimension, hope you understand
>>
>> a[:,:,1] = [f(1,1) f(2,1) ... f(n,1)]
>> a[:,:,2] = [f(1,2) f(2,2) ... f(n,2)]
>> .
>> .
>> .
>> a[:,:,m] = [f(1,m) f(2,m) ... f(n,m)]
>>
>> f(i,j) are column arrays above.
>>
>> It can be achieved by first creating the large matrix and then filling it
>>
>> a = zeros(Int64, k, n, m)
>> for i in 1:n, j in 1:m
>> a[:,i,j] = f(i,j)
>> end
>>
>> Is this the only way? I find it sort of ugly when its usually possible to
>> do nice construction using comprehensions in other cases.
>>
>>