numpy之多维数组的创建全过程

1. 概述

numpy是Python中重要的计算库之一,它提供了很多高效的多维数组操作功能。本文将详细介绍numpy多维数组的创建过程,从创建数组的各种方法开始,到对数组的切片、索引、扩展等操作,对多维数组的各种应用场景进行介绍,让你对numpy多维数组操作有更深入的了解。

2. numpy多维数组的创建方法

2.1. 使用numpy.array()方法创建数组

使用numpy.array()方法可以从Python的list或者tuple对象中创建数组。

import numpy as np

arr1 = np.array([1, 2, 3, 4, 5])

print(arr1)

arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr2)

从上面的代码可以看出,数组的每一个元素必须是同一类型的。在上面的例子中,所有元素都是整数类型。

2.2. 使用numpy.arange()方法创建数组

使用numpy.arange()方法可以创建一个数组,其中的元素是在一个范围内按指定步长连续排列的。下面的代码会创建一个数组,其中包含从1到11(不包括11)的整数,步长为2:

arr = np.arange(1, 11, 2)

print(arr)

输出结果为:

array([1, 3, 5, 7, 9])

注意,arange()方法创建的数组不包括end参数的值。

2.3. 使用numpy.zeros()方法创建数组

通过numpy.zeros()方法可以创建一个数组,其中的元素全部为0。可以通过shape参数指定数组的维度(可以是一个整数或者一个元组):

arr1 = np.zeros(5)

print(arr1)

arr2 = np.zeros((3, 4))

print(arr2)

输出结果为:

array([0., 0., 0., 0., 0.])

array([[0., 0., 0., 0.],

[0., 0., 0., 0.],

[0., 0., 0., 0.]])

2.4. 使用numpy.ones()方法创建数组

通过numpy.ones()方法可以创建一个数组,其中的元素全部为1。同样可以通过shape参数指定数组的维度(可以是一个整数或者一个元组):

arr1 = np.ones(5)

print(arr1)

arr2 = np.ones((3, 4))

print(arr2)

输出结果为:

array([1., 1., 1., 1., 1.])

array([[1., 1., 1., 1.],

[1., 1., 1., 1.],

[1., 1., 1., 1.]])

2.5. 使用numpy.eye()方法创建数组

numpy.eye(N,M=None,k=0,dtype=) 方法用于返回一个二维数组,其中主对角线元素为1,其余元素为0。

arr1 = np.eye(3)

print(arr1)

arr2 = np.eye(3, k=1)

print(arr2)

arr3 = np.eye(3, k=-1)

print(arr3)

输出结果为:

array([[1., 0., 0.],

[0., 1., 0.],

[0., 0., 1.]])

array([[0., 1., 0.],

[0., 0., 1.],

[0., 0., 0.]])

array([[0., 0., 0.],

[1., 0., 0.],

[0., 1., 0.]])

2.6. 使用numpy.linspace()方法创建数组

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None) 方法用于在指定的间隔内返回均匀间隔的数字。

arr = np.linspace(0, 10, num=4, endpoint=True)

print(arr)

输出结果为:

array([ 0., 3.33333333, 6.66666667, 10.])

3. numpy多维数组的切片和索引

numpy中的多维数组可以通过切片和索引访问其中的元素。

3.1. 切片操作

使用切片可以访问数组中的某个区间内的元素。

arr = np.array([1, 2, 3, 4, 5])

sub_arr = arr[1:4] # 获取索引为1到3的元素

print(sub_arr)

输出结果为:

array([2, 3, 4])

如果要访问多维数组中的某个区间,需要使用类似于下面的代码:

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

sub_arr = arr[0:2, 1:3] # 获取第0到1行,第1到2列的元素

print(sub_arr)

输出结果为:

array([[2, 3],

[5, 6]])

3.2. 索引操作

除了切片操作外,还可以使用索引操作访问数组中的元素。

arr = np.array([1, 2, 3, 4, 5])

print(arr[1]) # 获取索引为1的元素

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr[1, 1]) # 获取第1行第1列的元素

输出结果为:

2

5

4. numpy多维数组的扩展和合并

numpy提供了多种方法可以扩展、合并多维数组。

4.1. 使用numpy.append()方法在数组末尾添加元素

可以使用numpy.append()方法在数组的末尾添加元素,例如:

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr3 = np.append(arr1, arr2)

print(arr3)

输出结果为:

array([1, 2, 3, 4, 5, 6])

4.2. 使用numpy.concatenate()方法按指定维度合并数组

numpy中的concatenate()方法用于沿指定轴连接相同形状的两个或多个数组。例如,可以使用下面的代码将两个一维数组合并为一个:

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr3 = np.concatenate((arr1, arr2))

print(arr3)

输出结果为:

array([1, 2, 3, 4, 5, 6])

可以使用axis参数指定沿哪个轴进行连接,例如,可以按行或列连接多个二维数组:

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5, 6]])

arr3 = np.concatenate((arr1, arr2), axis=0) # 沿行进行连接

print(arr3)

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5], [6]])

arr3 = np.concatenate((arr1, arr2), axis=1) # 沿列进行连接

print(arr3)

输出结果为:

array([[1, 2],

[3, 4],

[5, 6]])

array([[1, 2, 5],

[3, 4, 6]])

5. numpy多维数组的计算

numpy中的多维数组可以进行各种计算操作,例如加、减、乘、除等。

5.1. 加法操作

可以使用numpy.add()方法实现数组的加法操作。

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5, 6], [7, 8]])

arr3 = np.add(arr1, arr2)

print(arr3)

输出结果为:

array([[ 6,  8],

[10, 12]])

5.2. 减法操作

可以使用numpy.subtract()方法实现数组的减法操作。

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5, 6], [7, 8]])

arr3 = np.subtract(arr1, arr2)

print(arr3)

输出结果为:

array([[-4, -4],

[-4, -4]])

5.3. 乘法操作

可以使用numpy.multiply()方法实现数组的乘法操作。

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5, 6], [7, 8]])

arr3 = np.multiply(arr1, arr2)

print(arr3)

输出结果为:

array([[ 5, 12],

[21, 32]])

5.4. 除法操作

可以使用numpy.divide()方法实现数组的除法操作。

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5, 6], [7, 8]])

arr3 = np.divide(arr1, arr2, out=np.zeros_like(arr1), where=arr2!=0)

print(arr3)

输出结果为:

array([[0.2       , 0.33333333],

[0.42857143, 0.5 ]])

注意,在除数为0的情况下,上面的代码会生成NaN或inf元素。可以使用out和where参数来解决这个问题。

6. numpy多维数组的高级操作

numpy提供了很多高级操作可以帮助你更灵活的处理多维数组。

6.1. 使用numpy.reshape()方法重塑数组

使用numpy.reshape()方法可以重塑多维数组。例如,可以将一个一维数组重塑为一个二维数组:

arr1 = np.array([1, 2, 3, 4, 5, 6])

arr2 = np.reshape(arr1, (2, 3))

print(arr2)

输出结果为:

array([[1, 2, 3],

[4, 5, 6]])

6.2. 使用numpy.transpose()方法转置数组

使用numpy.transpose()方法可以将数组进行转置。例如:

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

arr2 = np.transpose(arr1)

print(arr2)

输出结果为:

array([[1, 4],

[2, 5],

[3, 6]])

6.3. 使用numpy.sort()方法对数组进行排序

使用numpy.sort()方法可以对数组进行排序。例如:

arr = np.array([3, 1, 4, 2, 5])

sorted_arr = np.sort(arr)

print(sorted_arr)

输出结果为:

array([1, 2, 3, 4, 5])

6.4. 使用numpy.argsort()方法返回排序后的索引

使用numpy.argsort()方法可以返回数组排序后的元素对应的原始索引。例如:

arr = np.array([3, 1, 4, 2, 5])

sorted_index = np.argsort(arr)

print(sorted_index)

输出结果为:

array([1, 3, 0, 2, 4])

这表明,元素1的原始索引是1,元素2的原始索引是3,元素3的原始索引是0,以此类推。

7. 总结

在本文中,我们对numpy多维数组的创建、切片、索引、扩展、计算以及高级操作进行了详细介绍,并举例说明了每种操作的用法和输出结果。对于需要进行数据处理和科学计算的Python程序员来说,numpy多维数组是必不可少的工具。通过本文的学习,相信你已经能够熟练地使用numpy中的多维数组了。

后端开发标签