📜  numpy 子数组 python (1)

📅  最后修改于: 2023-12-03 15:03:18.992000             🧑  作者: Mango

Numpy子数组 Python介绍

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的子数组操作非常高效。