numpy库

发布时间 2023-06-08 22:48:41作者: 哎呦哎(iui)

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的属性

image

属性名字 属性解释
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)

image

创建数组的时候指定类型
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() #浅拷贝

深拷贝就是原数组变了之后这个深拷贝的也会变
image
image

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正态分布

image
这个是常用的:

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)

image

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数组的索引