📅  最后修改于: 2023-12-03 15:03:18.992000             🧑  作者: Mango
Numpy是一款Python科学计算库,主要用于数组计算。在NumPy中,我们可以使用子数组从原数组中选择一个部分。子数组是一个数组中的连续元素的视图,这使得NumPy的子数组操作非常高效。
在NumPy中,我们可以通过使用索引或切片语法来创建子数组。示例代码如下:
import numpy as np
# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])
# 获取子数组
sub_arr = arr[0:3] # 获取从0到3(不包括3)的元素
print(sub_arr)
# 输出:
# [1 2 3]
上面代码创建了一个一维数组,然后使用切片语法获取了一个子数组。具体来说,[0:3]
表示获取从索引0到索引3(不包括3)的元素。
还可以对二维数组进行同样的操作:
# 创建一个二维数组
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 获取子数组
sub_arr = arr[0:2, 1:3] # 获取从0到2(不包括2)行,1到3(不包括3)列的元素
print(sub_arr)
# 输出:
# [[2 3]
# [5 6]]
上面代码创建了一个二维数组,并使用切片语法获取了一个子数组。具体来说,[0:2, 1:3]
表示获取从第0行到第2行(不包括2),从第1列到第3列(不包括3)的元素。
在NumPy中,我们可以通过修改子数组来修改原数组。示例代码如下:
# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])
# 获取子数组并修改
sub_arr = arr[0:3] # 获取从0到3(不包括3)的元素
sub_arr[0] = 10 # 修改第一个元素
print(arr)
# 输出:
# [10 2 3 4 5]
上面代码创建了一个一维数组,并使用切片语法获取了一个子数组。然后,我们修改了子数组的第一个元素,并查看了原数组的值。可以看到,子数组的修改已经反映到了原数组中。
还可以对二维数组进行同样的操作:
# 创建一个二维数组
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 获取子数组并修改
sub_arr = arr[0:2, 1:3] # 获取从0到2(不包括2)行,1到3(不包括3)列的元素
sub_arr[0, 0] = 10 # 修改第一个元素
print(arr)
# 输出:
# [[ 1 10 3]
# [ 4 5 6]
# [ 7 8 9]]
上面代码创建了一个二维数组,并使用切片语法获取了一个子数组。然后,我们修改了子数组的第一个元素,并查看了原数组的值。可以看到,子数组的修改已经反映到了原数组中。
在NumPy中,如果我们需要使用子数组的副本而不是视图,我们可以使用copy()
方法。示例代码如下:
# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])
# 获取子数组并拷贝
sub_arr = arr[0:3].copy() # 获取从0到3(不包括3)的元素,并拷贝
sub_arr[0] = 10 # 修改第一个元素
print(arr)
# 输出:
# [1 2 3 4 5]
上面代码创建了一个一维数组,并使用切片语法获取了一个子数组。然后,我们使用copy()
方法拷贝了子数组,并修改了拷贝的第一个元素。注意,原数组并没有发生变化。
还可以对二维数组进行同样的操作:
# 创建一个二维数组
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 获取子数组并拷贝
sub_arr = arr[0:2, 1:3].copy() # 获取从0到2(不包括2)行,1到3(不包括3)列的元素,并拷贝
sub_arr[0, 0] = 10 # 修改第一个元素
print(arr)
# 输出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
上面代码创建了一个二维数组,并使用切片语法获取了一个子数组。然后,我们使用copy()
方法拷贝了子数组,并修改了拷贝的第一个元素。注意,原数组并没有发生变化。
在NumPy中,我们可以使用子数组从原数组中选择一个部分,并进行修改或拷贝。子数组是一个数组中的连续元素的视图,这使得NumPy的子数组操作非常高效。