What does "ValueError: object too deep for desired array" mean and how to fix it?
Question:
I’m trying to do this:
h = [0.2, 0.2, 0.2, 0.2, 0.2]
Y = np.convolve(Y, h, "same")
Y
looks like this:
While doing this I get this error:
ValueError: object too deep for desired array
Why is this?
My guess is because somehow the convolve
function does not see Y
as a 1D array.
Answers:
The Y
array in your screenshot is not a 1D array, it’s a 2D array with 300 rows and 1 column, as indicated by its shape
being (300, 1)
.
To remove the extra dimension, you can slice the array as Y[:, 0]
. To generally convert an n-dimensional array to 1D, you can use np.reshape(a, a.size)
.
Another option for converting a 2D array into 1D is flatten()
function from numpy.ndarray
module, with the difference that it makes a copy of the array.
np.convolve()
takes one dimension array. You need to check the input and convert it into 1D.
You can use the np.ravel()
, to convert the array to one dimension.
np.convolve
needs a flattened array as one of its inputs, you can use numpy.ndarray.flatten()
which is quite fast, find it here.
You could try using scipy.ndimage.convolve
it allows convolution of multidimensional images. here is the docs
I’m trying to do this:
h = [0.2, 0.2, 0.2, 0.2, 0.2]
Y = np.convolve(Y, h, "same")
Y
looks like this:
While doing this I get this error:
ValueError: object too deep for desired array
Why is this?
My guess is because somehow the convolve
function does not see Y
as a 1D array.
The Y
array in your screenshot is not a 1D array, it’s a 2D array with 300 rows and 1 column, as indicated by its shape
being (300, 1)
.
To remove the extra dimension, you can slice the array as Y[:, 0]
. To generally convert an n-dimensional array to 1D, you can use np.reshape(a, a.size)
.
Another option for converting a 2D array into 1D is flatten()
function from numpy.ndarray
module, with the difference that it makes a copy of the array.
np.convolve()
takes one dimension array. You need to check the input and convert it into 1D.
You can use the np.ravel()
, to convert the array to one dimension.
np.convolve
needs a flattened array as one of its inputs, you can use numpy.ndarray.flatten()
which is quite fast, find it here.
You could try using scipy.ndimage.convolve
it allows convolution of multidimensional images. here is the docs