Numpy is likely one of the most used module in Python and it’s utilized in a wide range of duties starting from creating array to mathematical and statistical calculations. Numpy additionally deliver effectivity in Python programming. Whereas utilizing numpy chances are you’ll encounter this error
It is likely one of the ceaselessly showing error and generally it turns into a frightening problem to unravel it.
This error usually seems when Python expects a single worth however you handed an array which consists of a number of values.
For instance : you wish to calculate exponential worth of an array however the perform for exponential worth was designed for scalar variable (which suggests single worth). While you go numpy array within the perform, it should return this error. This error dealing with is to forestall your code to course of additional and avoids surprising output from the perform later.
Create Reproducible Instance
Let’s perceive the problem with an instance. Suppose you could have an array consisting of decimals values and your supervisor requested you to transform it into integer.
Let’s create a numpy array having decimals (float)
import numpy as np
x = np.array([2, 3.5, 4, 5.3, 27])
Let’s convert to integer values (with out decimals)
np.int(x)
TypeError: solely size-1 arrays may be transformed to Python scalars
np.int()
is deprecated alias so you’ll be able to merely useint(x)
however you’re going to get the identical error. It’s as a result of eachnp.int()
andint(x)
solely accepts a single worth not a number of values storing in an array. In different phrases you handed an array as a substitute of scalar variable
Answer 1 : Utilizing .astype()
methodology
To be able to convert a NumPy array of float values to integer values, we are able to as a substitute use the next code:
x.astype(int)
Output
array([ 2, 3, 4, 5, 27])
3.5 and 5.3 from the unique array has been transformed to three and 5.
To be able to replicate modifications in x
array, use the code under :
x = x.astype(int)
Answer 2 : Utilizing np.vectorize()
One other potential answer is to make use of np.vectorize()
as a substitute of .astype()
. However be aware that this isn’t environment friendly as in comparison with the prior answer.
convert2Integer = np.vectorize(int)
convert2Integer(x)
Answer 3 : Utilizing map
By utilizing map
we are able to apply int()
perform over every array component. In map , we have to go the 2 arguments – perform and array which we wish to convert.
np.array(record(map(int, x)))
Answer 4 : Utilizing loop
It is simple to grasp loop and you’ve got flexibility over every component by way of information manipulation. However it isn’t essentially an environment friendly methodology. Additionally it entails writing additional strains of code which may be solved in a single line.
We created helper array y having comparable size that array x has. Later we transformed every component by way of int()
perform.
l = len(x)
y = np.array([None]*l)
for i in vary(l):
y[i] = int(x[i])
print(y)
Answer 5 : Utilizing apply_along_axis
Apply_along_axis
enables you to to use int()
to numpy array.
l = lambda y: [int(i) for i in y]
np.apply_along_axis(l, 0, x)
One other Instance
Suppose you could calculate log worth of an array.
import numpy as np
import math
x = np.array([2, 3, 1])
math.log(x)
TypeError: solely size-1 arrays may be transformed to Python scalars
This error occured as a result of math.log(x)
can solely take one numeric worth. Right here you should use np.log(x)
Output
array([0.69314718, 1.09861229, 0])
It’s also possible to repair it utilizing np.vectorize(math.log)
. See the whole answer under.
logMultiple = np.vectorize(math.log)
logMultiple(x)
Hope you understood now the way to resolve this error. The above options are supposed to present you an thought how the issue may be solved in a number of methods however answer 1 is sufficient to resolve your drawback. If in case you have any query(s) concerning this error, please be happy to publish within the remark part.