一、基本操作
1、adarray.方法()
2、np.函数名()
二、生成数组的方法
1、生成0和1的数组
为什么需要生成0和1的数组?
我们需要占用位置,或者生成一个空的数组
(1)ones(shape[, dtype, order])
生成一组1
shape:形状
dtype:类型
(2)zeros(shape[, dtype, order])
生成一组0
shape:形状
dtype:类型
(3)例子
指定形状的话既可以是元组(3, 4),也可以是列表[2, 3]
# 生成0和1的数组
# 生成3行4列的数组
np.zeros(shape=(3, 4), dtype="float32")
np.ones(shape=[2, 3], dtype=np.int32)
2、从现有数组生成
(1)array(object[, dtype, copy, order, subok, ndmin])
(2)asarray(a[, dtype, order])
(3)copy(a[, order])
(4)例子
# 从现有数组生成
score
data1 = np.array(score)
data1
data2 = np.asarray(score)
data2
data3 = np.copy(score)
data3
# 修改第4行第2列
score[3, 1] = 10000
score
data1
data2
data3
修改了原数组值之后,data1没有变化,data2有变化,data3没有变化
(5)关于array和asarray的不同
np.array() np.copy() 深拷贝
np.asarray() 浅拷贝
3、生成固定范围的数组
(1)np.linspace(start, stop, num, endpoint, retstep, dtype)
生成等间隔的序列,生成的值左闭右闭,等距离
说明:
start:序列的起始值
stop:序列的终止值,如果endpoint为true,该值包含于序列中
num:要生成的等间隔样例数量,默认为50
endpoint:序列中是否包含stop值,默认为true
retstep:如果为true,返回样例,以及连续数字之间的步长
dtype:输出ndarray的数据类型
(2)np.arange([start,] stop, [step])
和range()用法一样,生成左闭右开[start, stop),step是步长
(3)例子
# 生成固定范围的数组
np.linspace(0, 10, 5)
np.arange(0, 11, 5)
4、生成随机数组
np.random模块
(1)均匀分布
均匀分布(uniform distribution)是概率统计中的重要分布之一。顾名思义,均匀,表示可能性相等的含义。均匀分布在自然情况下极为罕见,而人工栽培的有一定株行距的植物群落即是均匀分布
(2)函数
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中描述一致
(3)例子
# 生成随机数组
data1 = np.random.uniform(low=-1, high=1, size=1000000)
data1
import matplotlib.pyplot as plt
# 1、创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2、绘制直方图
plt.hist(data1, 1000)
# 3、显示图像
plt.show()
(4)正态分布
正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续性随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的标准差,所以正态分布记做N(μ, σ)
正态分布的应用
生活、生产与科学实验中很多随机变量的概率分布都可以近似地用正态分布来描述
正态分布特点
μ决定了其位置,标准差σ决定了分布的幅度,当μ=0,σ=1时的正态分布是标准正态分布
标准差怎么来的
标准差是方差开平方根得来的
其中M为平均值,n为数据总个数,S为标准差,S^2可以理解为方差
方差为0,是所有数据一样的情况下。这组数据非常稳定,波动非常小
标准差与方差的意义
可以理解成数据的一个离散程度的衡量
(5)函数
np.random.normal(loc=0.0, scale=1.0, size=None)
参数介绍:
loc:float类型,此概率分布的均值(对应着整个分布的中心centre)
scale:float类型,此概率分布的标准差(对应于整个分布的宽度,scale越大,图像越矮胖,scale越小,图像越高瘦)
size:输出的数量,默认为None,只输出一个值
(6)例子
# 正态分布
data2 = np.random.normal(loc=1.75, scale=0.1, size=1000000)
data2
# 1、创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2、绘制直方图
plt.hist(data2, 1000)
# 3、显示图像
plt.show()
三、案例:随机生成8只股票2周的交易日涨幅数据
1、8只股票,两周(10天)的涨跌幅数据,如何获取?
(1)两周的交易日数量为:2 x 5 = 10
(2)随机生成涨跌幅在某个正态分部内,比如均值0,方差1
2、股票涨跌幅数据生成
# 案例:随机生成8只股票2周的交易日涨幅数据
stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))
stock_change
四、数组的索引、切片
1、获取第一个股票的前3个交易日的涨跌幅数据
# 获取第一个股票的前3个交易日的涨跌幅数据
stock_change[0, 0:3]
2、一维、二维、三维的数组如何索引
下标都是从0开始
# 一维、二维、三维的数组如何索引
a1 = np.array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]])
a1.shape
# 索引、切片
a1[0,0,1]
a1[1,0,1] = 100000
a1
五、形状修改
1、需求:让刚才的股票行、日期列返过来,变成日期行、股票列
2、ndarray.reshape(shape[, order])
返回新的ndarray,原始数据不改变
# 形状修改
# 需求:让刚才的股票行、日期列返过来,变成日期行、股票列
stock_change
stock_change.shape
# 8行10列,转换成10行8列
stock_change.reshape((10, 8))
reshape函数,并没有将行列进行转换,只是将这组数据重新进行了分割,排列顺序没有变
3、ndarry.resize(shape[, order])
没有返回值,对原始的ndarray进行了修改
stock_change
stock_change.shape
stock_change.resize((10, 8))
stock_change.shape
stock_change
resize函数修改后的效果和reshape返回新的ndarray一样,但是它改变了原始的数据
4、ndarray.T
转置,行变成列,列变成行。修改原数据
# 把形状改回来
stock_change.resize((8, 10))
stock_change
stock_change.T
六、类型修改
1、ndarray.astype(type)
返回转换后的ndarray,不修改原数据类型
# 类型修改
stock_change.astype("int32")
2、ndarray.tostring([order])
tostring() is deprecated. Use tobytes() instead.
3、ndarray.tobytes([order])
转换成bytes,ndarray序列化到本地
stock_change.tobytes()
七、数组的去重
1、ndarray.unique()
# 数组的去重
temp = np.array([[1,2,3,4], [3,4,5,6]])
np.unique(temp)
一维数据可以用set(),计算哈希去重
方法二:
set(temp.flatten())
先用flatten()方法把数组拍扁,再用set()方法去重