NumPy 是 Python 中用于科学计算的基础包。 它是一个 Python 库,提供多维数组对象, 各种派生对象(例如掩码数组和矩阵),以及 用于对阵列进行快速操作的各种例程,包括 数学、逻辑、形状操作、排序、选择、I/O、 离散傅里叶变换、基本线性代数、基本统计 操作、随机模拟等等。
NumPy 包的核心是ndarray
对象。这 封装同构数据类型的 N 维数组,其中 为了提高性能,在编译的代码中执行许多操作。 NumPy 数组和 标准 Python 序列:
将导入的名称缩短为了提高代码的可读性,这是一种广泛的约定,可使代码更具可读性。
import numpy as np
NumPy的主要对象是同构多为数组,是一个元素表(通常为数字),所有元素类型相同,由非负整数的元组索引。
在NumPy维度中被称为轴
。例如,3D空间中的点坐标[1,2,1]具有一个轴,该轴有3个元素,也说它的长度为3。
[[2,3,2],[1,3,2]]
上面的例子中数组有2个轴,第一个轴表示行,长度为2;第二个轴表示列,长度为3,
NumPy的数组类被称为ndarray
,它的属性有:
ndarray.ndim
: 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。ndarray.shape
: 数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。ndarray.size
: 数组元素的总数。这等于 shape 的元素的乘积。ndarray.dtype
: 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。ndarray.itemsize
: 数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。ndarray.data
: 该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素。属性名称 | 属性解释 |
---|---|
ndarray.shape | 返回一个元组,其中包含ndarray对象的每个维度的大小 |
nbytes | 返回数组中所有元素所占用的字节数 |
ndarray.T | 返回数组的转置视图 |
ndarray.real | 返回数组实部的视图 |
ndarray.imag | 返回数组虚部的视图 |
ndarray.flat | 返回一个数组元素迭代器 |
ndarray.flags | 返回一个描述数组内存块信息的对象,例如是否为C或Fortran连续等 |
ndarray.strides | 返回每个维度中相邻元素的字节数组成的元组,也可以用于判断数组是否是连续的 |
ndarray.base | 如果数组是视图,则返回其基础数组,否则返回None |
ndarray.ctypes | 返回表示数组内存块的ctypes对象 |
import numpy as np
arr = np.arange(15).reshape(3,5) #生成一个3行5列的数组对象arr
print(arr.ndim) # 输出 2 表示2个轴 行和列
print(arr.shape) # 输出(3,5) 表示3行5列
print(arr.size) # 输出15 表示元素的个数
print(arr.dtype.name) # 输出 int32
print(arr.itemsize) # 输出 4
1)使用array函数
从常规Python列表或元组中创建数组。
得到的数组是从Python列表中元素推导出来的。
import numpy as np
arr1 = np.array([4,4,5]) # 创建一维数组
print(arr1.dtype.name)
arr2 = np.array([[3,4,5],[6,7,8]]) # 创建二维数组
print(arr2.dtype.name)
arr3 = np.array((1.1,3.14,5.0)) # 创建浮点数数组
print(arr3.dtype.name)
2)数组的类型可以在创建时显示指定
import numpy as np
arr1 = np.array([[1,2],[3,4]],dtype= complex)
print(arr1)
3)通常,数组的元素最初是未知的,但其大小是 已知。因此,NumPy 提供了几个函数来创建 具有初始占位符内容的数组。这些最大限度地减少了 不断增长的阵列,这是一项昂贵的操作。
import numpy as np
arr_empty = np.empty((3,2),dtype=np.float64)
arr_empty
import numpy as np
arr_zeros = np.zeros((3,2),dtype=np.int16)
arr_zeros
import numpy as np
arr_ones = np.ones((2,3),dtype = np.int16)
arr_ones
4)为了创建数字序列,numpy提供了arange函数
,可以生成一个数组。
import numpy as np
arr = np.arange(10,30,5)
print(arr)
arr1 = np.arange(0.1,2,0.4)
print(arr1)
当range
与浮点数一起使用时,由于有限的浮点精度,通常不可能预测所获得的元素的数量,通常使用linspace函数
生成想要的元素数量数组
import numpy as np
arr_floats = np.linspace(0,2,9)
print(arr_floats)
arr_floats1 = np.linspace(0,2*np.pi,10)
print(arr_floats1)
当打印数组时,NumPy以与嵌套列表类似的方式显示它,但具有以下布局:
然后将一维数组打印为行,将二维数据打印为矩阵,将三维数据打印为矩数组表。
import numpy as np
# 打印一维数组
arr1 = np.array([3,2,5])
print(arr1)
# 打印二维数组
arr2 = np.arange(30).reshape(5,6)
print(arr2)
# 打印三维数组
arr3 = np.arange(24).reshape(2,3,4)
print(arr3)
如果数组太大而无法打印,NumPy会跳过数组的中间部分仅打印角点.
如果要禁用此行为并强制numpy打印整个数组,可以更改打印选项:set_printoptions
np.set_printoptions(threshold=sys.maxsize)
import numpy as np
print(np.arange(10000))
print(np.arange(10000).reshape(100,100))
这些运算符使得可以方便的对数组进行各种数学和逻辑运算,而不必编写循环,在进行逐元素运算时,NumPy会自动将运算应用到数组的每个元素上。
1) 算术运算符
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result1 = arr1 + arr2
print(result1)
result2 = arr2 - arr1
print(result2)
result3 = np.multiply(arr1, arr2)
print(result3) # 输出: [4, 10, 18]
result4 = arr1 * arr2
print(result4) # 输出: [4, 10, 18]
result5 = arr1 / arr2
print(result5)
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 5, 3])
result = arr1 == arr2
print(result) # 输出: [ True False True]
result1 = arr1 < arr2
print(result1) # 输出: [ False True False]
import numpy as np
arr1 = np.array([True, True, False])
arr2 = np.array([True, False, False])
result = arr1 | arr2
print(result) # 输出: [ True False False]
4) 其他运算符
import numpy as np
arr = np.array([1,2,3,4,5])
result = arr**2
print(result) # 输出 [ 1 4 9 16 25]
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
result = A @ B # 或者 np.matmul(A, B)
print(result) # 输出 [[19 22] [43 50]]
https://numpy.org/doc/stable/user/quickstart.html |