When you do this:
a = np.array([[np.array([[2, 2]]), np.array([[3, 3]])]])
the final call to np.array
actually concatenates the inner two, so you get one array at the end:
>>> a
array([[[[2, 2]],
[[3, 3]]]])
>>> a.shape
(1, 2, 1, 2)
But to mimic a cell array you want to basically have an array of arrays. You can acheive this by setting dtype=object
, but you must create the array and set the elements separately to avoid the automatic merging.
three = array([[array([[2, 2, 2]]), array([[3, 3]])]])
two = np.empty(three.shape, dtype=object)
two[0,0,0] = np.array([[2,2]])
two[0,1,0] = np.array([[3,3]])
Then:
sio.savemat('two.mat', {'two': two})
to see what they look like:
>>> two
array([[[array([[2, 2]])],
[array([[3, 3]])]]], dtype=object)
>>> two.shape
(1, 2, 1)
Note that I may have gotten confused about your desired shape, since you have so many nested brackets, so you might have to reshape some of this, but the idea should hold regardless.