Numpy01

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()

  

本文为原创文章,转载请标明出处
原文地址:https://www.cnblogs.com/harden13/p/14136421.html