w3resource

Divide each 2D slice of 3D array by 1D array using np.divide


13. Ufunc: 3D Array Division by 1D Array

ufunc with Broadcasting:

Write a NumPy program that creates a 3D array and a 1D array and uses np.divide to divide each 2D slice of the 3D array by the 1D array.

Sample Solution:

Python Code:

import numpy as np

# Create a 3D NumPy array of shape (3, 4, 5) with random integers
array_3d = np.random.randint(1, 10, size=(3, 4, 5))

# Create a 1D NumPy array with random integers
array_1d = np.random.randint(1, 10, size=5)

# Use the np.divide ufunc to divide each 2D slice of the 3D array by the 1D array
result_array = np.divide(array_3d, array_1d)

# Print the original arrays and the resulting array
print('Original 3D array:\n', array_3d)
print('1D array:\n', array_1d)
print('Resulting array after dividing each 2D slice by the 1D array:\n', result_array)

Output:

Original 3D array:
 [[[1 3 6 2 6]
  [9 8 8 3 8]
  [9 5 7 6 9]
  [5 2 7 6 9]]

 [[4 6 3 9 7]
  [2 9 4 8 7]
  [3 4 3 9 9]
  [2 4 4 1 6]]

 [[2 6 5 2 3]
  [9 5 7 6 6]
  [6 2 7 6 7]
  [3 6 2 9 8]]]
1D array:
 [7 3 2 4 3]
Resulting array after dividing each 2D slice by the 1D array:
 [[[0.14285714 1.         3.         0.5        2.        ]
  [1.28571429 2.66666667 4.         0.75       2.66666667]
  [1.28571429 1.66666667 3.5        1.5        3.        ]
  [0.71428571 0.66666667 3.5        1.5        3.        ]]

 [[0.57142857 2.         1.5        2.25       2.33333333]
  [0.28571429 3.         2.         2.         2.33333333]
  [0.42857143 1.33333333 1.5        2.25       3.        ]
  [0.28571429 1.33333333 2.         0.25       2.        ]]

 [[0.28571429 2.         2.5        0.5        1.        ]
  [1.28571429 1.66666667 3.5        1.5        2.        ]
  [0.85714286 0.66666667 3.5        1.5        2.33333333]
  [0.42857143 2.         1.         2.25       2.66666667]]]

Explanation:

  • Import Libraries:
    • Imported numpy as "np" for array creation and manipulation.
  • Create 3D NumPy Array:
    • Create a 3D NumPy array named 'array_3d' with random integers ranging from 1 to 9 and a shape of (3, 4, 5).
  • Create 1D NumPy Array:
    • Create a 1D NumPy array named 'array_1d' with random integers ranging from 1 to 9 and a length of 5.
  • Broadcasting with np.divide:
    • Used the np.divide "ufunc" to divide each 2D slice of the 3D array by the 1D array. NumPy automatically broadcasts the 1D array to match the shape of each 2D slice.
  • Finally print the original 3D array, the 1D array, and the resulting array after division.

For more Practice: Solve these Related Problems:

  • Write a Numpy program to use np.divide to divide each 2D slice of a 3D array by a 1D array, then verify the operation using broadcasting.
  • Write a Numpy program to perform element-wise division on a 3D array by a 1D array and then handle division by zero cases gracefully.
  • Write a Numpy program to use np.divide on a 3D array and a 1D array, and then compare the results with manual iteration over the first axis.
  • Write a Numpy program to apply np.divide on a 3D array divided by a 1D array and then compute the mean of each resulting 2D slice.

Python-Numpy Code Editor:

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Compute Dot Product using np.dot and custom ufunc in NumPy.
Next: How to define and apply a Custom ufunc with Broadcasting in NumPy.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.