Is there a difference between numpy.square
and using the **
operator on a Numpy array?
From what I can see it yields the same result.
Any differences in efficiency of execution?
An example for clarification:
In [1]: import numpy as np In [2]: A = np.array([[2, 2],[2, 2]]) In [3]: np.square(A) Out[3]: array([[4, 4], [4, 4]]) In [4]: A ** 2 Out[4]: array([[4, 4], [4, 4]])
square() method is used to find the square of every element in a given array. The numpy square() method takes four parameters: arr, out, where, and dtype, and returns a new array with an argument value as the square of the source array elements.
squeeze() function is used when we want to remove single-dimensional entries from the shape of an array.
inner() Advertisements. This function returns the inner product of vectors for 1-D arrays. For higher dimensions, it returns the sum product over the last axes.
You can check the execution time to get clear picture of it
In [2]: import numpy as np In [3]: A = np.array([[2, 2],[2, 2]]) In [7]: %timeit np.square(A) 1000000 loops, best of 3: 923 ns per loop In [8]: %timeit A ** 2 1000000 loops, best of 3: 668 ns per loop
For most appliances, both will give you the same results. Generally the standard pythonic a*a
or a**2
is faster than the numpy.square()
or numpy.pow()
, but the numpy
functions are often more flexible and precise. If you do calculations that need to be very accurate, stick to numpy
and probably even use other datatypes float96
.
For normal usage a**2
will do a good job and way faster job than numpy
. The guys in this thread gave some good examples to a similar questions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With