Numpy Tutorial
Creating NumPy Array
NumPy Array Manipulation
Matrix in NumPy
Operations on NumPy Array
Reshaping NumPy Array
Indexing NumPy Array
Arithmetic operations on NumPy Array
Linear Algebra in NumPy Array
NumPy and Random Data
Sorting and Searching in NumPy Array
Universal Functions
Working With Images
Projects and Applications with NumPy
Understanding the difference between a copy and a view in NumPy is crucial, especially when working with large datasets where memory efficiency is important. This tutorial will guide you through the concepts of copying and viewing NumPy arrays.
Start by importing the necessary library:
import numpy as np
A view is another way of accessing array data. When you create a view, you don't create a new array with its own data. Instead, the view refers to the original array's data.
Example:
original = np.array([1, 2, 3, 4]) view_arr = original.view() print(original) print(view_arr)
Modify the view_arr
and see what happens:
view_arr[0] = 10 print(original) # The original array is modified! print(view_arr)
Unlike a view, a copy is a new array with its own data. Modifying the copy does not modify the original array.
Example:
original = np.array([1, 2, 3, 4]) copy_arr = original.copy() print(original) print(copy_arr)
Now, modify the copy_arr
:
copy_arr[0] = 10 print(original) # The original array remains unchanged print(copy_arr)
You can use the base
attribute to determine if an array owns its data or shares it with another:
# For a view print(view_arr.base) # This will return the original array # For a copy print(copy_arr.base) # This will return None
Slicing: Returns a view.
arr = np.array([1, 2, 3, 4]) slice_arr = arr[1:3] print(slice_arr.base) # This will return the original array
Reshaping: Returns a view, as long as the reshape doesn't change the data's order in memory.
arr = np.array([1, 2, 3, 4]) reshaped_arr = arr.reshape(2, 2) print(reshaped_arr.base) # This will return the original array
Fancy Indexing: Returns a copy.
arr = np.array([1, 2, 3, 4]) fancy_arr = arr[[0, 2]] print(fancy_arr.base) # This will return None
Using Functions: Some functions return a copy, while others might return a view, depending on the operation and parameters.
Understanding the difference between copies and views in NumPy is fundamental. Always be cautious when modifying arrays, especially if you're unsure whether you're working with a copy or a view. Using the base
attribute can be a helpful way to identify this. When in doubt, and you want to ensure that the original data remains unchanged, always use the copy()
method.
Creating a copy of a NumPy array using numpy.copy()
.
import numpy as np # Creating a NumPy array original_array = np.array([1, 2, 3, 4, 5]) # Creating a copy copied_array = np.copy(original_array) print("Original Array:", original_array) print("Copied Array:", copied_array)
Creating a view of a NumPy array using slicing.
import numpy as np # Creating a NumPy array original_array = np.array([1, 2, 3, 4, 5]) # Creating a view using slicing view_array = original_array[1:4] print("Original Array:", original_array) print("View Array:", view_array)
Differentiating between shallow copy and deep copy of NumPy arrays.
import numpy as np # Creating a NumPy array original_array = np.array([1, 2, 3, 4, 5]) # Shallow copy shallow_copy = original_array.view() # Deep copy deep_copy = np.copy(original_array) print("Original Array:", original_array) print("Shallow Copy:", shallow_copy) print("Deep Copy:", deep_copy)
Creating a view of a NumPy array using slicing.
import numpy as np # Creating a 2D NumPy array original_array = np.array([[1, 2, 3], [4, 5, 6]]) # Creating a view of the array view_array = original_array[:, 1:] print("Original Array:\n", original_array) print("View Array:\n", view_array)
Understanding the difference between copying and direct assignment in NumPy.
import numpy as np # Creating a NumPy array original_array = np.array([1, 2, 3, 4, 5]) # Direct assignment assigned_array = original_array # Creating a copy copied_array = np.copy(original_array) print("Original Array:", original_array) print("Direct Assignment:", assigned_array) print("Copied Array:", copied_array)
Modifying a view of a NumPy array and observing the changes in the original array.
import numpy as np # Creating a NumPy array original_array = np.array([1, 2, 3, 4, 5]) # Creating a view using slicing view_array = original_array[1:4] # Modifying the view view_array[1] = 10 print("Original Array:", original_array) print("Modified View Array:", view_array)