How to fix numpy TypeError: Cannot cast ufunc subtract output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
Problem:
You are trying to do a simple arithmetic operation on a NumPy array but you see an error message like
TypeError: Cannot cast ufunc subtract output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
Solution
You are trying to substract a float
from an int64
array. This does not work with operators like +=
or -=
Example:
import numpy as np
data = np.asarray([1, 2, 3, 4], dtype=np.int64) # This is an int array!
print(data - 5) # This works
print(data - 5.0) # This works as well
# This raises: Cannot cast ufunc subtract output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
data -= 5.0
Option 1 (preferred):
Use -
instead of -=
: Instead of data -= 5.0
use data = data - 5.0
Option 2:
Explicitly cast data to float
(or the first dtype
of your error message):
data = data.astype('float64')
# Now this works
data -= 5.0
This option is not preferred since doing it requires using the correct datatype. The first option works without regarding the actual datatype.