N维数组-ndarray
ndarray的使用
ndarray的属性
数组属性反映了数组本身固有的信息。
属性名字 | 属性解释 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
ndarray的形状
首先创建一些数组。
1 | # 创建不同形状的数组 |
分别打印出形状。
1 | a.shape |
如何理解数组的形状?
二维数组:
三维数组:
ndarray的类型
1 | type(score.dtype) |
dtype是numpy.dtype类型,先看看对于数组来说都有那些类型:
名称 | 描述 | 简写 |
---|---|---|
np.bool | 用一个字节存储的布尔类型(True或False) | ‘b’ |
np.int8 | 一个字节大小,-128至127 | ‘i’ |
np.int16 | 整数,-32768至32767 | ‘i2’ |
np.int32 | 整数,-2^31 至2^32-1 | ‘i4’ |
np.int64 | 整数,-2^63 至2^63-1 | ‘i8’ |
np.uint8 | 无符号整数,0至255 | ‘u’ |
np.uint16 | 无符号整数,0至65535 | ‘u2’ |
np.uint32 | 无符号整数,0至2^32-1 | ‘u4’ |
np.uint64 | 无符号整数,0至2^64-1 | ‘u8’ |
np.float16 | 半精度浮点数: 16位,正负号1位,指数5位,精度10位 | ‘f2’ |
np.float32 | 单精度浮点数: 32位,正负号1位,指数8位,精度23位 | ‘f4’ |
np.float64 | 双精度浮点数: 64位,正负号1位,指数11位,精度52位 | ‘f8’ |
np.complex64 | 复数,分别用两个32位浮点数表示实部和虚部 | ‘c8’ |
np.complex128 | 复数,分别用两个64位浮点数表示实部和虚部 | ‘c16’ |
np.object_ | python对象 | ‘O’ |
np.string_ | 字符串 | ‘S’ |
np.unicode_ | unicode类型 | ‘U’ |
创建数组的时候指定类型
1 | 1,2,3],[4,5,6]], dtype=np.float32)>>> a.dtype a = np.array([[ |
- 注意: 若不指定,整数默认int64,小数默认float64。
生成数组的方法
生成0和1的数组
- np.ones(shape, dtype)
- np.ones_like(a, dtype)
- np.zeros(shape, dtype)
- np.zeros_like(a, dtype)
1 | ones = np.ones([4, 8]) |
返回结果:
1 | array([[1., 1., 1., 1., 1., 1., 1., 1.], |
1 | np.zeros_like(ones) |
返回结果:
1 | array([[0., 0., 0., 0., 0., 0., 0., 0.], |
从现有数组生成
生成方式
np.array(object, dtype)
np.asarray(a, dtype)
1 | a = np.array([[1,2,3],[4,5,6]]) |
关于array和asarray的不同
1 | a = np.array([[1, 2, 3], [4, 5, 6]]) |
1 | array([[1, 2, 3], [4, 5, 6]]) # a |
生成固定范围的数组
np.linspace (start, stop, num, endpoint)
创建等差数组 - 指定数量
参数:
- start: 序列的起始值
- stop: 序列的终止值
- num: 要生成的等间隔样例数量,默认为50
- endpoint: 序列中是否包含stop值,默认为ture
1 | # 生成等间隔的数组 |
返回结果:
1 | array([0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.]) |
np.arange (start, stop, step, dtype)
创建等差数组 - 指定步长
参数:
- step: 步长, 默认值为1
1 | np.arange(10, 50, 2) |
返回结果:
1 | array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48]) |
np.logspace (start, stop, nym)
创建等比数列
参数:
- num: 要生成的等比数列数量,默认为50
1 | # 生成10^X |
返回结果:
1 | array([1., 10., 100.]) |
生成随机数组
使用模块介绍
- np.random模块
正态分布
一、基础概念复习:正态分布 (理解)
a.什么是正态分布
正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的方差,所以正态分布记作N(μ, σ)。
b.正态分布的应用
生活、生产与科学实验中很多随机变量的概率分布都可以近似地用正态分布来描述。
c.正态分布特点
μ决定了其位置,其标准差σ决定了分布的幅度。当μ=0, σ=1时的正态分布是标准正态分布。
标准差如何来?
- 方差
是在概率论和统计方差衡量一组数据时离散程度的度量。
1 | $$\sigma^2 = \frac{(x_1 - M)^2 + (x_2 - M)^2 + (x_3 - M)^2 + \ldots + (x_n - M)^2}{n}$$ |
其中M为平均值,n为数据总个数,σ为标准差,σ^2可以理解一个整体为方差。
1 | $$\sigma = \sqrt{ \frac{1}{N} \sum_{\substack{i=1 \\ \\}}^{N} (x_i - \mu)^2 }$$ |
- 标准差与方差的意义
可以理解成数据的一个离散程度的衡量。
二、正态分布创建方式
- np.random.randn(d0, d1, …, dn)
功能: 从标准正态分布中返回一个或多个样本值
- np.random.normal(loc=0.0, scale=1.0, size=None)
loc: float
此概率分布的均值 (对应着整个分布的中心centre)
comscale: float
此概率分布的标准差 (对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size: int or tuple of ints
输出的shape,默认为None,只输出一个值
- np.random.standard normal(size=None)
返回指定形状的标准正态分布的数组。
举例1: 生成狗值为1.75,标准差为1的正态分布数据,100000000个
1 | x1 = np.random.normal(1.75, 1, 100000000) |
返回结果:
1 | array([2.90646763, 1.46737886, 2.21799024,..., 1.56047411, 1.87969135, 0.9028096 ]) |
1 | # 生成均匀分布的随机数 |
例如: 我们可以模拟生成一组股票的涨跌幅的数据
举例2:随机生成4支股票1周的交易日涨幅数据
4支股票,一周(5天)的涨跌幅数据,如何获取?
- 随机生成涨跌幅在某个正态分布内,比如均值0,方差1
股票涨跌幅数据的创建
1 | # 创建符合正态分布的4只股票5天的涨跌幅数据 |
返回结果:
1 | array([[-0.5142373 , -0.32586912, 0.39132714, 1.02290317, -0.33438889], |
均匀分布
np.random.rand(d0, d1, …, dn)
- 返回[0.0, 1.0)内的一组均匀分布的数。
np.random.uniform(low=0.0, high=1.0, size=None)
功能:从一个均匀分布[low, high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
参数介绍:
- low: 采样下界,float类型,默认值为0;
- high: 采样上界,float类型,默认值为1;
- size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k),则输出mnk个样本,缺省时输出1个值。
返回值: ndarray类型,其形状和参数size中描述一致。
np.random.randint(low, high=None, size=None, dtype=’/‘)
从一个均匀分布中随机采样,生成一个整数或N维整数数组。
取数范围: 若high个为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
1 | # 生成均匀分布的随机数 |
返回结果:
1 | array([0.22411206, 0.31414671, 0.85655613, ..., -0.92972446, 0.95985223, 0.23197723]) |
画图看分布状况:
1 | import matplotlib.pyplot as plt |