Numpy数组创建
np.array(list/tuple) # 接收一切序列型对象,如list列表、tuple元组等
数组 (array) 是相同类型的元素 (element) 的集合所组成数据结构 (data structure)。
numpy 数组中的元素用的最多是「数值型」元素
数组常见属性 type:数组类型,numpy.ndarray dtype:数组元素类型,是双精度浮点 (和 type 区分) ndim:维度个数 len():数组长度为 5 (注意这个说法只对一维数组有意义) size:数组元素个数为 5 shape:数组形状,即每个维度的元素个数 (用元组来表示),只有一维,元素个数为 5,写成元组形式是 (5,)
class1 = np.array([89, 96, 45, 59, 98]) class2 = np.array([True, 18, 177.5, '张三']) # 只要有一个是字符串,其他都是字符串
特征和维度 维度:我们观察或认知事物的角度 axis,中文叫「轴」,一个数组是多少维度就有多少根轴。由于 Python 计数都是从 0 开始的,那么 第 1 维度 = axis 0 第 2 维度 = axis 1 第 3 维度 = axis 2 n维数组,一个「标量」或「元组类型的形状」
数组查询介绍
- 类list查询
- ndarray数组查询方法,推荐
class3 = np.array([ [ [True,80,177.7,'张小明'], [False,99,164.5,'李丽'], [True,59,158,'王华'] ], [ [True,95,178,'张小明'], [False,99,164.5,'李丽2'], [True,39,178,'王华2'] ], ]) class12[1][1][3] class12[1, 1, 3] # ndarray数组查询方法,推荐
ndarray数组自动创建
为了实现某些运算,需要快速构造符合要求的大数组
Numpy函数生成的数组,如不指定类型几乎全为浮点型(arange除外,它是整型),因为科学计算中测量值,例如温度、长度,都是浮点数
常用函数
- 序列:
np.arange()
- 自定义均匀分布:
np.random.uniform()
- 自定义均匀分布、整数:
np.random.randint()
- 自定义正态分布:
np.random.normal()
生成序列
np.arange(10) # 序列,默认起始值0 np.arange(5, 15) # 起始值,结束值 np.arange(5, 15, 2) # 起始值,结束值,步长 # 改变数据的形状 np.arange(24) np.arange(24).reshape(3, 8) np.arange(24).reshape(2, 3, 4)
在指定的间隔内返回均匀间隔的数字
np.linspace(1,10,5) #(start,stop,num=50,endpoint=True,retstep=False,dtype=None) 不包含结束值 # 绘制一条直线 # 一次函数,y = a * x + b a = -5 b = -8 x = np.arange(5) y = a * x + b plt.plot(x, y) ############################## # 绘制曲线 # 二次函数:y = a * x ** 2 + b * x + c a = 3 b = 5 c = 8 # x = np.arange(-5, 5) # 非线性函数要平滑需不断增大值范围,导致图像不平衡 x = np.linspace(-5, 5, 500) # 固定坐标轴范围,同时图像更平滑 y = a * x ** 2 + b * x + c # plt.figure(figsize=(18, 10)) plt.plot(x, y)
伪随机数:计算机生成的随机数是伪随机数
均匀分布的随机数(0-1之间)
np.random.rand(10) np.random.rand(2, 3, 4)
带起始、结束值的均匀分布随机数
np.random.uniform(10, 50, 10) np.random.uniform(10, 50, (3, 2)) x = np.random.uniform(10, 50, 1000) plt.hist( x, 50, edgecolor='white', ) plt.show()
均匀分布随机数:整数
# 最常用 np.random.randint(10, 100, (3, 2)) # 随机数种子,固定随机数 np.random.seed(1) # 随机数种子 np.random.randint(10, 100, (3, 2))
正态分布
自然界和人类社会的数据分布一般是正态分布
- 彼此无关的大量数据(不稀缺资源),最终会形成正态分布
- 彼此相关的大量数据(稀缺资源),最终会形成指数分布
身高,财产,考试成绩,入学率
当一组测量数据服从正态分布时,
- 约68.26%的测量值落在平均值处正负一个标准差的区间内
- 约95.44%的测量值将落在平均值处正负两个标准差的区间内
- 约99.73%的值将落在平均值处正负三个标准差的区间内
# 标准正态分布随机数 # 浮点数,平均值0,标准差1 np.random.randn(10) np.random.randn(2, 3, 4)
# 自定义正态分布,分布中心是loc(概率分布的均值),标准差是scale,形状是size np.random.normal(50, 1, (3, 5))
指数分布(幂率分布
x = np.random.exponential(100, 1000) plt.hist( x, 50, edgecolor='white', ) plt.show()
中国青年男性身高分析
自定义正态分布 平均值1.68,标准差0.1 1.68+or-0.1 man = np.round(np.random.normal(1.68, 0.1, 200000), 2) plt.figure(figsize=(18, 8)) plt.hist( man, 30, edgecolor='white', ) plt.xticks(np.arange(12, 21) / 10) plt.show()