numpy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
语法:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
#导包,导numpy 导过包才可以使用numpy来创建array
import numpy as np #as 是起别名的意思,咱们这边把numpy改成np,这样我们后续也方便调用
参数 参数及描述 Object 任何序列类型 dtype 数组的所需数据类型,可选。 copy 可选,默认为true,对象是否被复制。 order C(按行)、F(按列)或A(任意,默认)。 subok 默认情况下,返回的数组被强制为基类数组。如果为true,则返回子类。 ndimin 指定返回数组的最小维数。
# Object 任何序列类型
tuple01 = (1,2,3)
list01= [1,2,3]
set01 = {5,6,7}
dict01 ={"张三":10,"李四":20}
np01= np.array(dict01)
print(np01)
#dtype 数组的所需数据类型,可选。
list01 = [1,2,3]
np01= np.array(list01,dtype=float)
print(np01)
"""
说明 np02 是 np01 的副本,两个是不同的对象
所以np02 和 np01 的数据不同
"""
list01 = [1,2,3]
np01= np.array(list01)
np02=np.array(np01,copy=True)
np02[0]=10
print(np01)
print(np02)
"""
可以看到数据是一样的,说明np02和np01是同一个对象
"""
list01 = [1,2,3]
np01= np.array(list01)
np02=np.array(np01,copy=False)
np02[0]=10
print(np01)
print(np02)
#由于order效果不明显,也不常用,在这里作为了解
#subok 默认情况下,返回的数组被强制为基类数组。如果为true,则返回子类。
#matrix 是矩阵 之后会给大家详细讲解先回用
np01 = np.matrix('1 2 7; 3 4 8; 5 6 9')
print(type(np01))
print(np01)
np02 = np.array(np01, subok=True)
np03 = np.array(np01, subok=False)
print(type(np02)) # 如果是true返回矩阵
print(type(np03)) #如果是False,强制改为了数组
#ndimin 指定返回数组的最小维数。
list01 = [1,2,3]
np01= np.array(list01,dtype=float,ndmin=3)
print(np01)
#使用array创建一维数组
list01 = [1,2,3,4]
np01 = np.array(list01)
print(np01)
print(type(np01))
#使用array创建二维数组
list02 = [[1,2,3,4],[5,6,7,8]]
np02 = np.array(list02)
print(np02)
print(type(np02))
#使用array创建三维数组
list03 = [[[1,2,3,4],[5,6,7,8],[9,10,11,12]]]
np03 = np.array(list03)
print(np03)
print(type(np03))
"""
arange(start,stop,step,dtype)
1.不写start,默认从0开始
2.左开右闭
3.step步长,不写默认是1
"""
#一维数组
a = np.arange(10) #[0 1 2 3 4 5 6 7 8 9]
a = np.arange(2,10) #[2 3 4 5 6 7 8 9]
a = np.arange(1,10,2) #[1 3 5 7 9]
a = np.arange(1,10,2,dtype=float)
print(a)
#二维数组
#切记前面的12,必须满足3*4
np01 = np.arange(12).reshape(3, 4)
print(np01)
常用的random函数
函数 描述 np.random.random(size) 生成0到1之间的随机数 np.random.randint(low,high=None,size=None,dtype="1") 生成随机的整数 np.random.randn(d0,d1,d2,d3.........) 生成标准正态的随机数(期望为0,方差为1) np.random.normal(loc,scale,size) 生成正态分布(指定期望和方差) np.random.uniform(low,high,size) 生成均勻分布的随机数 np.random.shuffle() 随机打乱顺序 np.random.seed() 设置随机数种子 np.random.sample(size) 生成随机的浮点数
# np.random.random() 生成0到1之间的随机数
#创建一维数组 size生成几个数据,可直接写4
np01= np.random.random(size=4) #[0.13475357 0.8088961 0.52055803 0.49706622]
#创建二维数组 size=(3,4) 3行4列 可用()和[] ,效果一样
np01= np.random.random((3,4))
#创建三维数组 两个三行四列
np01= np.random.random((2,3,4))
print(np01)
####
"""
np.random.randint(low,high=None,size=None,dtype="1") 生成随机的整数
low:开始
high=None :结束
size:长度
dtype数据类型,默认是int32 no01.dtype属性
1.左开右闭
2.不写low默认是0
"""
#创建一维数组
np01= np.random.randint(1,11,10)#1-10
#创建二维数组
np01= np.random.randint(1,11,(3,4))#1-10
#创建三维数组
np01= np.random.randint(1,11,(2,3,4))#1-10
print(np01)
#创建标准的正态分布
#一维数组
np01=np.random.randn(4)
#二维数组
np01=np.random.randn(2,4)
#三维数组
np01=np.random.randn(3,2,4)
print(np01)
####
"""
np.random.normal(loc,scale,size)生成正态分布(指定期望和方差)
loc: 期望,默认0
scale: 方差,默认1.0
size: 长度
"""
np01= np.random.normal(size=5)
np01= np.random.normal(loc= 2,scale=3,size=5)
np01= np.random.normal(size=(2,3,5))
print(np01)
####
"""
np.random.uniform(low,high,size) 生成均勻分布的随机数
low: 不写默认是0,
high: 结尾,
: 长度
1.左开右闭
"""
np01= np.random.uniform(size= 4)#四个数据几乎不会相差太多,比较均匀
np01= np.random.uniform(size= (2,4))
np01= np.random.uniform(high=3)
print(np01)
####
"""
np.random.shuffle(ArrayLike)随机打乱顺序
"""
np01 = np.array([2,5,6,7,3])
print(np01)
np.random.shuffle(np01)
print(np01)
####
"""
np.random.seed()设置随机数种子
从每堆种子里选出来的数都是不会变的,从不同的堆里选随机种子每次都不一样,若想每次都能得到相同的随机数,每次产生随机数之前,都需要调用一次seed()
"""
np.random.seed(1)
np01= np.random.randint(1,10,size= 5)
np.random.seed(1)
np02= np.random.randint(1,10,size = 5)
print(np01)
print(np02)
####
"""
np.random.sample(size) 生成随机的浮点数
"""
np01= np.random.sample(size=2)
print(np01)
np02= np.random.sample(size=(2,3))
print(np02)
numpy.zeros(shaps,dtype=float,order="C") #创建指定大小的数组,数组以0填充
"""
numpy.zeros(shaps,dtype=float,order="C") #创建指定大小的数组,数组以0填充
shaps:维度
dtype:数据类型
order:按行按列
"""
np01= np.zeros(5) #[0. 0. 0. 0. 0.]
np01= np.zeros(5,dtype="int32") #[0 0 0 0 0]
np01= np.zeros((2,5),dtype="int32")
"""
[[0 0 0 0 0]
[0 0 0 0 0]]
"""
print(np01)
函数 描述 np.zeros((3, 4)) 创建3×4的元素全为0的数组 np.ones((3, 4)) 创建3×4的元素全为1的数组 np.empty((2, 3)) 创建2×3的空数组,空数据中的值并不为0,而是未初始化的垃圾值 np.zeros_like(ndarr) 以ndarr相同维度创建元素全为0数组 np.ones_like(ndarr) 以ndarr相同维度创建元素全为1数组 np.empty_like(ndarr) 以ndarr相同维度创建空数组 np.eye(5) 该函数用于创建一个5×5的矩阵,对角线为1,其余为0 np.full((3,5), 10) 创建3×5的元素全为10的数组,10为指定值
np01= np.ones((2,5),dtype="int32")
np01= np.empty((2,5),dtype="int32")
print(np01)
list01= [
[1,2,3],
[4,5,6]
]
np01= np.array(list01)
print(np01.shape)
np02= np.zeros_like(np01,dtype=float)
print(np02)
print(np02.shape)
# np.eye(5) 该函数用于创建一个5×5的矩阵,对角线为1,其余为0
np01= np.eye(5)
print(np01)
# np.full((3,5), 10) 创建3×5的元素全为10的数组,10为指定值
#10是指定的,你可以指定任意值
np01= np.full((3,5),5)
print(np01)
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数 描述 start 序列的起始值 stop 序列的终止值 ,如果endpoint=True,则证明数组包含于数列 num 生成样本数量,默认是50 endpoint 如果为ture则包含stop,否则不包含 retstep 如果retstep=Ture,生成的数组会显示间距,否则不显示 dtype 数据类型
"""
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
"""
np01= np.linspace(1,10,5)#从1-10,生成5个数据
np01= np.linspace(1,10,5,endpoint=True)#把10包含进去
np01= np.linspace(1,10,5,endpoint=False)#把10不包含进去
np01= np.linspace(1,10,5,retstep=True)#显示间距
np01= np.linspace(1,10,5,dtype="int32")
print(np01)
np.logspace(start,stop,num=50,endpoint=Ture,base=10.0,dtype=None)
参数 描述 start 序列的起始值 stop 序列的终止值 ,如果endpoint=True,则证明数组包含于数列 num 生成样本数量,默认是50 endpoint 如果为ture则包含stop,否则不包含 base 对数log的底数,默认10.0 dtype 数据类型
属性 描述 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),而int32类型的数组的itemsize为4(=32/8)。它等于ndarray.dtype.itemsize。 ndarray.T 数组转置,及行列调换 ndarray.nbytes 整个数组所需的字节数量,可以使用nbytes属性。其值等于数组的size属性值乘以 itemsize属性值。
np01 = np.array([1,2,3,4])
np01 = np.array([[1,2,3,4]])
#print(np01.ndim)
print(np01.shape)
print(np01.size)
print(np01.dtype)
print(np01.itemsize) #一个字节默认是8为 32/8 = 4
print(np01.nbytes)#一个数字字节4,4*4=16
list01 = [
[1,2],
[3,4],
[5,6]
]
np01=np.array(list01)
print(np01)
np02= np01.T
print(np02)
数组的创建基本就是这些,这边为大家准备了几个练习题。
创建一个长度为10的一维全为0的ndarry对象,然后让第五个元素等于
创建一个元素为从10到49的narray对象。
创建一个4*4的二维数组,并输出数组元素类型。
创建一个数组,该数组可以完全将坐标位置为(0,1,3)到(3,0,1)的转置。
将4题中的数据类型转换为float64。
最后提醒大家,第一次使用array的时候,记得要导包!下课!