1.介绍
Numpy (Numerical Python) 是一个开源的 Python 科学计算库,用于快速处理任意维度的数组。(n-任意 d-dimension 维度 array-数组)
Numpy 支持常见的数组和矩阵操作。对于同样的数值计算任务,使用 Numpy 比直接使用 Python 要简洁的多。
Numpy 使用 ndarray 对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
Numpy是一个数值计算库数据结构是ndarray
2.ndarray介绍
NumPy 提供了一个 N 维数组类型 ndarray,它描述了相同类型的"items"的集合
2.1 ndarray的属性
属性名字 | 属性解释 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
import numpy as np
score = np.array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
print(type(score))
print(score.shape)
print(score.dtype)
print(score.size)
<class 'numpy.ndarray'>
(8, 5) #维度
int32 #类型
40 #元素个数
2.2ndarray的形状
例如:
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3,4])
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
a #(2,3)
array([[1, 2, 3],
[4, 5, 6]])
b#(4,)
array([1, 2, 3, 4])
c(2,2,3)
array([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]]])
分析一下这个:
array([[1, 2, 3],
[4, 5, 6]]),这个说明一共有二维,第一维就是去掉一个中括号,之后是两个二维的([1, 2, 3],[4,5,6])然后第二位就是4,5,6有三个,所以是(2,3)
array([[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]]])
这个一共有三维(可以看一下这个一个有多少个括号)
去掉最外面的括号之后有两个[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6]]
然后取其中一个之后再去掉一个[],之后是两个[1, 2, 3],[4, 5, 6]
然后再取一个去掉[],之后是1,2,3三个
所以这个的形状为(2,2,3)
创建数组的时候指定类型
np.array([1.1, 2.2, 3.3], dtype="float32")np.array([1.1, 2.2, 3.3], dtype="float32")
3.生成数组的方法
3.1生成01数组
生成全0
np.zeros(shape=(3,4))
指定类型:np.zeros(shape=(3,4),dtype="flaot32")
生成全1
np.ones(shape(3,4))
指定类型:np.ones(shape=(3,4),dtype=np.int32)
3.2从现有的数组中生成
np.array()
np.copy() #深拷贝
np.asarray() #浅拷贝
深拷贝就是原数组变了之后这个深拷贝的也会变
3.3生成固定范围的数组
1.np.linspace
np.linspace (start, stop, num, endpoint, retstep, dtype)
start序列的起始值stop序列的终止值,
如果endpoint为true,该值包含于序列中
num 要生成的等间隔样例数量,默认为50
endpoint序列中是否包含stop值,默认为ture
retstep如果为true,返回样例,以及连续数字之间的步长
dtype输出ndarray的数据类型
np.linspace(0,10,5)
返回结果
array([ 0. , 2.5, 5. , 7.5, 10. ])
2.np.arange()
np.arange()
arange(a,b,c) [a,b) c为步长
注意这个右区间是开的
3.4生成随机数组
np.random模块
3.4.1均匀分布(每一组的可能性相等)
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中描述—致。size=(2,3)生成一个2维2*3的数列
例如:
data1=np.random.uniform(low=-1,high=1,size=10)
data1
array([-0.32389251, 0.25663163, 0.18592025, 0.83991882, 0.94209985,
-0.41592839, 0.30407462, 0.30773603, 0.07309516, -0.00111122])
np.random.randint(low, high=None, size=None, dtype='/')
从一个均匀分布中随机采样,生成一个整数或N维整数数组,取数范围︰若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
np.random.randint(low=1, high=100,size=10)
array([47, 95, 22, 4, 39, 44, 59, 25, 42, 63])
3.4.2正态分布
这个是常用的:
np.random.normal(loc=0.0, scale=1.0,size=None)
loc: float
此概率分布的均值(对应着整个分布的中心centre)
scale: float
此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
size: int or tuple of ints
输出的shape,默认为None,只输出一个值
data2 = np.random.normal(loc=1.75, scale=0.1, size=1000000)
4.切片、索引和形状修改
案例:随机生成8只股票2周的交易日涨幅数据
stock_change = np.random.normal(loc=0, scale=1, size=(8, 10))
stock_change
array([[-1.57018774, -1.25970766, -2.3796732 , 1.14848963, -0.30345475,
1.20735246, -1.52672555, 0.13540022, 0.84785041, 0.61968931],
[ 0.61505944, -0.46245204, -0.94052479, 0.29319442, -0.25777012,
1.93851043, 1.61619433, 0.16969634, 1.59050888, 0.0138765 ],
[ 0.07429565, 0.56954703, 0.3926989 , 0.90978652, -0.61529256,
1.47658577, -2.01634565, 0.35092389, 1.3432413 , -0.28950357],
[ 0.79408811, -0.32485522, 0.19922215, 1.23239335, 1.19632515,
0.5691303 , -1.13906447, 0.3843912 , -0.38900849, 0.38448067],
[-1.12731803, 1.4888357 , -0.65074985, -1.03021949, 0.96198375,
-0.93488657, -0.57725512, 0.86569825, -0.06399348, -0.58289178],
[ 0.14884572, -1.15397656, 0.1978762 , 0.70838332, -1.90472605,
1.0220865 , 0.23101243, -0.80568295, 2.13918437, -1.73500104],
[-0.27744519, 1.65703998, 1.40726915, 0.2631683 , -0.18302691,
0.56395719, -2.74668778, -0.04663681, -0.67760237, 0.87581514],
[ 0.17755502, -0.95923995, -0.19681983, -0.54050483, -1.88367949,
0.16945743, -0.04160143, -2.12832587, 0.17009967, -0.77175123]])
4.1切片操作
获取第一个股票的前3个交易日的涨跌幅数据
也就是从stock_change[0][0]到stock_change[0][2]
然后这个就是
stock_change[0, 0:3]
#这个代码就是第一维是0,然后第二维是[0,3)
array([-1.57018774, -1.25970766, -2.3796732 ])
4.2数组的索引
如果是查看的话直接:a[1][0][2]
修改的话直接赋值就行a[1][0][2]=10000
4.3形状的修改
需求:让刚才的股票行、日期列反过来,变成日期行,股票列
就是行,列反转