Thinking about it, it is probably not so ... efficient.
Le lundi 24 mars 2014 19:41:14 UTC+1, Antoine Chevalier a écrit : > > Hi, I guess you want a 3d array instead of a 2D array containing 1D > arrays. I tried this: > > arrayLength = 10; > > matrixCols = 10; > > matrixSlices= 10; > function arrayTest(arrayLength,i,j) singleArray = > ones(1,arrayLength)*(i+j); #each array has a unique value i+jreturn > singleArrayend > > matrix3d = [arrayTest(arrayLength,i,j)[k] for k=1:arrayLength, > i=1:matrixCols, j=1:matrixSlices ]; > matrix3d[:,1,1] > > It works fine ;) > > > > Le lundi 24 mars 2014 15:07:49 UTC+1, Linus Mellberg a écrit : >> >> 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. >> >>