Skip to content
Advertisement

ValueError: x and y must have same first dimension, but have shapes (1, 2) and (2,)

I want to find maxima and minima from a list, but after running my program, terminal shows error like “ValueError: x and y must have same first dimension, but have shapes (1, 2) and (2,),”. How to fix this problem?

Code:

from scipy.signal import argrelextrema

data = np.array([-1, 0, 1, 2, 1, 0, -1, -2, -1, 0, 1, 2, 1 ])
plt.plot(data)


maximums = argrelextrema(data, np.greater) 

plt.plot(maximums, data[maximums], "x")

minimums = np.array(argrelextrema(data, np.less))

plt.plot(minimums, data[minimums], ".")

plt.show()

Advertisement

Answer

As you can see in the documentation, maxima and minima are not 1 dimensional arrays but tuples of ndarrays

import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt

data = np.array([-1, 0, 1, 2, 1, 0, -1, -2, -1, 0, 1, 2, 1 ])

maxima = argrelextrema(data, np.greater) 
minima = argrelextrema(data, np.less)

let’s check

print(maxima)

gives

(array([ 3, 11]),)

and

print(minima)

gives

(array([7]),)

Since you need the first element only of the tuple, you can do

plt.plot(data)
plt.plot(maxima[0], data[maxima[0]], "x", ms=10)
plt.plot(minima[0], data[minima[0]], ".", ms=10)
plt.show()

enter image description here

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement