NumPy(Numerical Python)是Python的一个开源数值计算扩展库。它支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy的数组(ndarray)对象是一个快速且灵活的多维数组对象,用于存储相同类型的元素。NumPy提供了用于执行元素级计算以及执行复杂的数学和其他类型的数组操作的函数。
一、安装numpy:
pip install numpy
在终端或命令指示符中输入安装numpy包。
二、NumPy的主要特点:
-
ndarray对象:NumPy的核心是ndarray对象,这是一个多维数组对象,具有固定大小的同类型元素集合。与Python的内置列表(list)不同,ndarray的元素类型必须是相同的,并且在创建时其大小不可改变(尽管可以重新调整形状)。
-
广播(Broadcasting):NumPy的广播功能允许NumPy在执行算术运算时,对不同形状的数组进行操作,而不必显式地创建足够大的数组以匹配另一个数组的形状。
-
高效的元素级操作:由于NumPy的数组元素都是同类型的,因此NumPy可以直接在内存中连续存储数据,这使得对数组中的元素进行元素级操作变得非常高效。
-
大量的数学函数库:NumPy提供了大量的数学函数,这些函数可以对数组进行操作,如三角函数、指数函数、对数函数等。
-
线性代数、傅里叶变换和随机数生成:NumPy还提供了线性代数、傅里叶变换和随机数生成的函数。
三、使用numpy
1.array创建数组:
numpy模块的array函数可以生成多维数组。例如,如果要生成一 个二维数组,需要向array函数传递一个列表类型的参数。每一个列 表元素是一维的ndarray类型数组,作为二维数组的行。另外,通 过ndarray类的shape属性可以获得数组每一维的元素个数(元组形 式),也可以通过shape[n]形式获得每一维的元素个数,其中n是 维度,从0开始。
import numpy as np
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
使用实例:
import numpy as np
#创建一维数组
a = np.array([1, 2, 3, 4, 5, 6])
print(a)
print('a数组的维度:', a.shape)
#创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b)
print('b数组的维度:', b.shape)
#输出
# [1 2 3 4 5 6]
# a数组的维度: (6,)
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# b数组的维度: (3, 3)
a=np.array([1,2,3,4,5,6],ndmin=3)
print(a)
#输出:[[[1 2 3 4 5 6]]] 三维数组
a=np.array([1,2,3,4,5,6],dtype=np.float16)
print(a)
#输出:[1. 2. 3. 4. 5. 6.],浮点型
2.随机数创建
numpy中的random模块包含了很多方法可以用来产生随机数:
1.随机数:
1.返回[0.0, 1.0)范围的随机数
2.随机整数
import numpy as np
#numpy.random.randint()的使用
#生成 [0,low)范围的随机整数
x=np.random.randint(5,size=10)
print(x)
#生成[low,high)范围的随机整数
y=np.random.randint(5,10,size=10)
print(y)
#生成[low,high)范围的2*4的随机整数
z=np.random.randint(5,10,size=(2,4))
print(z)
2.正太分布
numpy.random.randn(d0,d1,…,dn)
randn函数返回一个或一组样本,具有标准正态分布(期望为0,方 差为1)。 dn表格每个维度 返回值为指定维度的数组
import numpy as np
x=np.random.randn()
print(x)
y=np.random.randn(2,4)
print(y)
z=np.random.randn(2,3,4)
print(z)
指定期望和方差的正太分布:
#正太分布(高斯分布)loc:期望 scale:方差 size 形
状
print(np.random.normal(loc=3,scale=4,size=
(2,2,3)))
3.ndarray 对象
import numpy as np
x1=np.random.randint(10,size=6)
x2=np.random.randint(10,size=(3,4))
x3=np.random.randn(3,4,5)
print('ndim属性'.center(20,'*'))
print('ndim:',x1.ndim,x2.ndim,x3.ndim)
print('shape属性'.center(20,'*'))
print('shape:',x1.shape,x2.shape,x3.shape)
print('dtype属性'.center(20,'*'))
print('dtype:',x1.dtype,x2.dtype,x3.dtype)
#输出:
# *******ndim属性*******
# ndim: 1 2 3
# ******shape属性*******
# shape: (6,) (3, 4) (3, 4, 5)
# ******dtype属性*******
# dtype: int32 int32 float64
创建ndarray
你可以使用NumPy库中的多种函数来创建ndarray
对象,例如:
numpy.array()
:从常规Python对象(如列表、元组等)创建数组。numpy.zeros()
:创建指定形状和类型的新数组,数组中的所有元素都初始化为0。numpy.ones()
:创建指定形状和类型的新数组,数组中的所有元素都初始化为1。numpy.empty()
:创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组,里面的元素的值是之前内存的值:numpy.arange()
:根据给定的起始值、结束值和步长,返回指定形状和类型的一维数组。
import numpy as np
# 使用numpy.array从列表创建ndarray
arr = np.array([1, 2, 3, 4, 5])
#输出:[1 2 3 4 5]
# 创建一个3x3的零矩阵
zero_matrix = np.zeros((3, 3))
#输出:
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
# 创建一个形状为(2,3)且所有元素为1的数组
ones_array = np.ones((2, 3))
#输出:
# [[1. 1. 1.]
# [1. 1. 1.]]
# 使用numpy.arange创建一维数组
range_array = np.arange(0, 10, 2)
#输出:[0 2 4 6 8]