一、ndarray数据类型
numpy最核心的数据类型是ndarray,它是N维数组对象,代表着相同类型的元素的集合。一个ndarray数组几乎是一个Python列表的扩展,但它的操作更加灵活和高效。对于这个类型,有几个重要的属性需要了解:
import numpy as np
nd = np.array([1, 2, 3, 4])
print(nd.ndim) # 维度数
print(nd.shape) # 各个维度的元素数量
print(nd.size) # 元素总数
print(nd.dtype) # 元素数据类型
其中,ndim、shape、size这三个属性以及dtype数据类型属性是我们必须知道的。
二、创建ndarray数组
ndarray数组可以从Python列表、元组、数组等进行创建。
# 从Python列表创建ndarray数组
nd1 = np.array([1, 2, 3])
# 从Python元组创建ndarray数组
nd2 = np.array((1, 2, 3))
# 通过numpy中的方法创建ndarray数组
nd3 = np.arange(10) # array([0, 1, 2, ..., 9])
nd4 = np.zeros((2, 3)) # 2行3列的全0矩阵
nd5 = np.ones((2, 3)) # 2行3列的全1矩阵
nd6 = np.eye(3) # 3行3列的单位矩阵
nd7 = np.random.random((2, 2)) # 随机2行2列的数组
三、ndarray数组的索引和切片
ndarray中的元素可以通过它们在数组中的位置进行访问,该位置是由数组的整数索引标志。可以使用切片符号‘:’来获取部分数组。下面的代码展示了如何对ndarray数组进行索引和切片。
# 一维数组的索引和切片
nd1 = np.array([1, 2, 3])
print(nd1[0]) # 1
print(nd1[1:3]) # [2 3]
# 二维数组的索引和切片
nd2 = np.array([[1, 2, 3], [4, 5, 6]])
print(nd2[1, 2]) # 6
print(nd2[1, :]) # [4 5 6]
print(nd2[:, 2]) # [3 6]
四、数组的运算与变形
numpy中可以对ndarray数组进行各种基本的数学操作、运算、变形等。下面的示例展示了一些基本的示例操作。
nd1 = np.array([1, 2, 3])
nd2 = np.array([2, 3, 4])
# 数组加法
print(nd1 + nd2) # [3 5 7]
# 数组乘法
print(nd1 * nd2) # [2 6 12]
# 数组变形
nd3 = np.array([[1, 2], [3, 4]])
print(nd3.reshape(1, 4)) # [[1 2 3 4]]
# 数组求和
print(nd3.sum(axis=0)) # [4 6]
print(nd3.sum(axis=1)) # [3 7]
五、线性代数
numpy提供了许多操作矩阵和向量操作的函数,可以方便的进行线性代数计算,例如计算行列式、矩阵乘法、逆矩阵等操作。
a = np.array([[1, 2], [3, 4]])
b = np.array([[4, 5], [6, 7]])
c = np.dot(a, b) # 矩阵乘法
print(c) # [[16, 19], [36, 43]]
d = np.linalg.det(a) # 行列式
print(d) # -2.0
e = np.linalg.inv(a) # 逆矩阵
print(e) # [[-2. , 1. ], [ 1.5, -0.5]]
总结
本文简单介绍了numpy库中最重要的概念:ndarray。我们学习了ndarray的基本属性、创建方式、索引和切片、数组运算与变形以及线性代数等方面的操作。掌握了这些知识,我们可以更加高效、方便地处理数组、矩阵等数据类型。numpy的强大之处在于其底层的优化操作,使得我们可以在处理大规模数组时,得到快速、高效的操作及计算结果。