The `np.square()`

function returns the element-wise square of its input:

```
import numpy as np
x = np.array([1, 2, 3])
np.square(x)
# Expected result
# array([1, 4, 9])
```

The function accepts any array-like input. If the input is a scalar, it will return a scalar. If the input is an array, it will return an array. It will also convert Python sequences to `np.ndarray`

if necessary.

But note: although similar in most cases, this operatoin is not *exactly* the same as `x ** 2`

. When `x`

is a `np.ndarray`

, then `np.square()`

is indeed equivalent to `x ** 2`

, but when `x`

is a `np.matrix`

, then `x ** 2`

will actually be the matrix multiplied by itself with matrix multiplication:

```
x_matrix = np.matrix(np.stack([x] * 3))
x_matrix
# Expected result
# matrix([[1, 2, 3],
# [1, 2, 3],
# [1, 2, 3]])
np.square(x_matrix)
# Expected result
# matrix([[1, 4, 9],
# [1, 4, 9],
# [1, 4, 9]])
x_matrix ** 2
# Expected result
# matrix([[ 6, 12, 18],
# [ 6, 12, 18],
# [ 6, 12, 18]])
```

### A couple other notes about `np.square()`

- Data type will be left alone by the operation. If you input integer types youâ€™ll get integer types out.
- It works on complex NumPy types.

If you want to know how to reverse the operation, check out my post on NumPy square root.