Abhik
Abhik

Reputation: 1940

Insert A numpy multi dimensional array inside another 1d array

I already have an array with shape (1, 224, 224), a single channel image. I want to change that to (1, 1, 224, 224). I have been trying

newarr.shape
#(1,224,224)
arr = np.array([])
np.append(arr, newarr, 1)

I always get this IndexError: axis 1 out of bounds [0, 1). If i remove the axis as 0 , then the array gets flattened . What am I doing wrong ?

Upvotes: 0

Views: 762

Answers (2)

Daniel
Daniel

Reputation: 19547

A dimension of 1 is arbitrary, so it sounds like you want to simply reshape the array. This can accomplished by:

newarr.shape = (1, 1, 244, 244)

or

newarr = newarr[None]

Upvotes: 1

hpaulj
hpaulj

Reputation: 231335

The only way to do an insert into a higher dimensional array is

bigger_arr = np.zeros((1, 1, 224, 224))
bigger_arr[0,...] = arr

In other words, make a target array of the right size, and assign values.

np.append is a booby trap. Avoid it.

Occasionally that's a useful way of thinking of this. But it's simpler, and quicker, to think of this as a reshape problem.

bigger_arr = arr.reshape(1,1,224,224)
bigger_arr = arr[np.newaxis,...]
arr.shape = (1,1,224,224)   # a picky inplace change
bigger_arr = np.expand_dims(arr, 0)

This last one does

a.reshape(shape[:axis] + (1,) + a.shape[axis:])

which gives an idea of how to deal with dimensions programmatically.

Upvotes: 1

Related Questions