# Logs – NumPy Ufunc

NumPy ufunc logs refer to the natural logarithm of the input array elements calculated using NumPy’s universal functions (ufuncs).

## NumPy Ufunc Logs

In terms of Numpy Ufunc logs, NumPy provides an array of functions that you can utilize to generate logs at the base 2, e, and 10.

As part of our discussion, we will also see how we can implement a custom Ufunc to take logs from any base.

When a log cannot be calculated, all log functions will include -inf or inf in the output.

## Base 2 Logs

To calculate a log at base 2, utilize the log2() function.

In the mrx_arr array below, retrieve the log at base 2 of each of the digits:

#### Example:

import numpy as npy mrx_arr = npy.arange(1, 6) print(npy.log2(mrx_arr))

With the arrange() function set the range of the two arrays then find the log value of the array at base 2 and then apply the add() function:

#### Example:

import numpy as npy mrx_arr = npy.arange(1,5) ample_arr = npy.arange(6,10) mrx_arr = npy.log2(mrx_arr) ample_arr = npy.log2(ample_arr) sum_arr = npy.add(mrx_arr, ample_arr) print(sum_arr)
Reminder: arrange(1, 6) function provides an array of integers ranging from 1 (included) to 6 (not included).

## Base 10 Logs

If you are looking for Numpy Ufunc logs, you can utilize the log10() function to log the data at the base 10 level.

Utilizing the mrx_arr array below, calculate the log at base 10 of each of the digits as follows:

#### Example:

import numpy as npy mrx_arr = npy.arange(1, 6) print(npy.log10(mrx_arr))

The arrange() function sets the range of the two arrays, then computes the log value of the array at base 10 and executes the add() function:

#### Example:

import numpy as npy mrx_arr = npy.arange(1,5) ample_arr = npy.arange(6,10) mrx_arr = npy.log10(mrx_arr) ample_arr = npy.log10(ample_arr) sum_arr = npy.add(mrx_arr, ample_arr) print(sum_arr)

## Base E Logs

You can calculate the log at the base e by calling the log() function.

Utilizing the following array, check out the log at base e of all items:

#### Example:

import numpy as npy mrx_arr = npy.arange(1, 6) print(npy.log(mrx_arr))

Calculate the sum of the mrx_arr and ample_arr after implementing the arrange() and log() functions:

#### Example:

import numpy as npy mrx_arr = npy.arange(1,5) ample_arr = npy.arange(6,10) mrx_arr = npy.log(mrx_arr) ample_arr = npy.log(ample_arr) sum_arr = npy.add(mrx_arr, ample_arr) print(sum_arr)

## Log at Any Base

There is no function in NumPy that can handle the log at any base, so we can call the frompyfunc() function in conjunction with the built-in function math.log() with two input parameters and one return parameter:

Implement the frompyfunc() function:

#### Example:

from math import log import numpy as npy mrx_log = npy.frompyfunc(log, 2, 1) print(mrx_log(10, 30))

Apply the add() function along with the frompyfunc() function:

#### Example:

from math import log import numpy as npy mrx_log = npy.frompyfunc(log, 2, 1) ample_log = npy.frompyfunc(log, 2, 1) sum_arr = npy.add(mrx_log(25,5), ample_log(11,19)) print(sum_arr)

### Example Explanation

1 – The log() function is imported from the math module.

2 – Two ufuncs are created using numpy.frompyfunc(). Both mrx_log and ample_log are created to take two input arguments and return an array with a single output. The log() function is specified as the function to be applied by these ufuncs.

3 – The numpy.add() function is called with two arguments:

• The result of applying the mrx_log ufunc to scalar values 25 and 5.
• The result of applying the ample_log ufunc to scalar values 11 and 19.

The numpy.add() function adds the two resulting arrays element-wise to produce a single output array.

4 – The output of the code is the array produced by numpy.add().

## NumPy Ufunc logs Benefits

Using NumPy ufunc logs has several benefits, including:

• NumPy ufunc logs are implemented in C and optimized for fast execution, making them much faster than performing the same operations in pure Python.
• NumPy ufunc logs operate element-wise on arrays, allowing for efficient memory usage by avoiding the need for loops and temporary arrays.
• It allow for vectorized operations, which can perform calculations on entire arrays at once, making it easier to write concise and readable code.
• It is compatible with a wide range of other scientific computing libraries, making them a versatile tool for data analysis and scientific research.
• NumPy ufunc logs provide high-precision results for mathematical calculations, making them suitable for complex scientific applications that require accurate results.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0