shape mismatch: objects cannot broadcast to single shape – Code Example

Total
0
Shares

In this article we will see Python code to resolve valueerror: shape mismatch: objects cannot be broadcast to a single shape. This error occurs when one of the variables being used in the arithmetic on the line has a shape incompatible with another on the same line (i.e., both different and non-scalar).

When you do arithmetic operations like addition, multiplication over variables of different shape then this error occurs.

Code Example

Error Code – Let’s first replicate the error –

import matplotlib.pyplot as plt
import numpy as np
 
x = np.arange(10)
y = np.arange(11)
plt.bar(x, y)

This code will generate valueerror: shape mismatch: objects cannot be broadcast to a single shape. Because (x,y) co-ordinates are always in pairs and if there are more y than x, then how will you plot them? Same issue happens with different libraries and they throw error.

The error could also occur in SciPy Pearson correlation coefficient function pearsonr(x,y). Both x and y needs to have same shape. The below code will throw error –

from scipy import stats
res = stats.pearsonr([1, 2, 3, 4], [10, 9, 2.5, 6, 4])
print(res)

Error –

Traceback (most recent call last):
  File "pearsonr.py", line 2, in <module>
    res = stats.pearsonr([1, 2, 3, 4], [10, 9, 2.5, 6, 4])
  File "/usr/lib/python3.6/site-packages/scipy/stats/stats.py", line 3001, in pearsonr
    r_num = np.add.reduce(xm * ym)
ValueError: operands could not be broadcast together with shapes (4,) (5,)

Solution

Keep the shape of variables similar.

import matplotlib.pyplot as plt
import numpy as np
 
x = np.arange(11)
y = np.arange(11)
plt.bar(x, y)

Now we set both (x,y) co-ordinates of same shape. So, it will work fine.

from scipy import stats
res = stats.pearsonr([1, 2, 3, 4, 5], [10, 9, 2.5, 6, 4])
print(res)

Here we set both arrays of same shape in pearsonr method. Output will be –

(-0.7426106572325057, 0.15055580885344547)

Live Demo

Open Live Demo