赞
踩
相比列表来说,具有更高效的数据运算方式,主要就是产生一个numpy数组,对着个numpy数组进行一系列的操作
- numpy提供了一个n维数组类型ndarray,它描述了相同类型的“items”的集合
产生一个numpy数组,用np.array()
import numpy as np
score=np.array([[80,89,93],[99,100,97],[100,91,89]])
print(score)
>>>
[[ 80 89 93]
[ 99 100 97]
[100 91 89]]
score=np.array([[80,89,93],[99,100,97],[100,91,89]])
数据相加(直接将numpy数组相加)
import numpy as np
a=np.array([1,2,3,4])
b=np.array([2,5,7,9])
print(a+b)
>>> [ 3 ,7, 10, 13]
数据相乘(直接将numpy数组相乘,对应位置相乘)
import numpy as np
l=np.array([0,1,2,3])
m=np.array([1,5,6,7])
print(l*m)
>>>[0,5,12,21]
l=[0,1,2,3]
a=np.array(l)
print(a)
>>>[0 1 2 3]
a=np.array([1,2,3,4])
print(a)
>>>[0,1,2,3]
np.zeros(5)
>>>[0. 0. 0. 0. 0.]#这里全都是以浮点数形式呈现
import numpy as np
#dtype参数可以用来设置数据类型
a=np.ones(5,dtype='bool')
print(a)
>>>[ True True True True True]
import numpy as np #dtype参数可以用来设置数据类型 a=np.ones(5,dtype='bool'); a.fill(False) b=np.ones(5,dtype='int') b.fill(8) print(f'{a}\n{b}') >>> [False False False False False] [8 8 8 8 8]
若不一致:如下
b=np.ones(5,dtype='int')
b.fill(2.5)
print(f'{a}\n{b}')
>>>[2 2 2 2 2] 自动取整
a=a.astype(‘float’)
a.fii(a)
print(a)
>>> [2.5 2.5 2.5 2.5 2.5] 这样就不会取整了
Np.arange(min,max,步长)
import numpy as np
a=np.arange(1,10,2)#左闭右开,第三个参数是步长
print(f'{a}\n')
>>> [1 3 5 7 9]
np.linspace()
第一个参数:起始值;
第二个参数:末尾值;
第三个参数:数列元素总数
该数列为左闭右闭的
import numpy as np
a=np.linspace(2,10,5)#左闭右开,第三个参数是步长
print(f'{a}\n')
>>> [ 2. 4. 6. 8. 10.] (default as float)
np.rand(begin,stop,step)
import numpy as np
a=np.random.rand(10)#左闭右开,第三个参数是步长
print(f'{a}\n')
>>> [0.91932804 0.09148843 0.33195572 0.53666308 0.84589437
0.031161920.59439441 0.71651447 0.23198908 0.40219744]
生成0到1之间的10个浮点数——np.randn()
import numpy as np
a=np.random.randn(10)#左闭右开,第三个参数是步长
print(f'{a}\n')
>>>
[ 2.36241182 -1.94827648 -0.38120604 2.1457075 -0.47019724 1.10687691
0.38223196 1.01900408 0.95301641 -0.48533215]
生成0到1的十个随机浮点数,但是是按照正态分布的——np.randint()
import numpy as np
a=np.random.randint(1,10,10)#左闭右开,第三个参数是随机数个数
print(f'{a}\n')
>>> [2 1 7 1 8 8 7 2 4 9]
①数值在0-1之间
np.random.randome(m,n) #生成一个m*n的矩阵
②数值为整数
np.random.randint(min,max,size=(m,n))
生成一个数值在min~max之间的m*n的矩阵,max是取不到的,min可以取到
import numpy as np
a=np.array([8,22,3,1])
print(type(a))
>>> <class ‘numpy.ndarray’>
import numpy as np
a=np.array([8,22,3,1])
print(a.dtype)
>>> int32
import numpy as np
a=np.array([[8,22,3,1],[3,1,2,9]])
print(a.shape)
>>> (2, 4) 两行四列
import numpy as np
a=np.array([[8,22,3,1],[3,1,2,9],[5,6,7,8]])
print(np.size(a))
>>> 12
import numpy as np
a=np.array([[8,22,3,1],[3,1,2,9],[5,6,7,8]])
print(a.ndim)
>>>2
与python列表的索引用法一致
每一维度都支持切片的规则,注意这个切片操作是从一维上去进行的,如果是多维,那么每个维度之间用逗号隔开,且每个维度都是如下的切片操作,步长可以省略,默认为1
[lower:upper:step]
A[行索引,列索引]
A[0,3:5] #得到第一行的第四和第五两个元素
本质:行索引为[不填:不填]所以行索引和列索引之间要加一个逗号。a[:,2]
import numpy as np
a=np.array([0,1,2,3,4])
b=a[2:4]
print(b)
b[0]=10
print(a)
引用机制意味着,python并没有为b分配新的空间来储存它的值,而是让b指向了a所分配的内存空间,因此,改变b会改变a的值。
b指向[2,3],所以后期改变的也是这个位置
import numpy as np
a=np.array([0,1,2,3,4])
b=a[2:4].copy()
print(b)
b[0]=10
print(a)
>>>[2 3]
[0 1 2 3 4]
import numpy as np
a=np.array([0,1,2,3,4])
index=[0,3]//第一行的第4列
print(a[index])
>>>[0 3]
mask=np.array([0,1,1,0,2],dtype='bool')
print(mask)
Mask必须是布尔数组,长度必须和数组长度相等。
print(a[mask])
>>>[1 2 4] 布尔花式索引与上面的数组对应,取出为True的元素
import numpy as np
b=np.random.rand(5,5)
print(b[(0,1,2,3,4),(0,1,2,3,4)])
>>>[0.33667912 0.57474909 0.15822414 0.58057992 0.04927936]
可见取出了对角线的数据
import numpy as np
b=np.random.rand(5,5)
print(b)
print(f'取出数据为:\n{b[3:,[0,2,4]]}')
>>>
[[0.24637232 0.02090892 0.47057795 0.17539054 0.68465151]
[0.77696115 0.22541052 0.96777386 0.61846717 0.85367903]
[0.38041631 0.97900975 0.93722615 0.59153615 0.39870354]
[0.43944809 0.61795432 0.99711014 0.16310237 0.67411796]
[0.63311709 0.8688676 0.94573147 0.41703868 0.23195399]]
取出数据为:
[[0.43944809 0.99711014 0.67411796]
[0.63311709 0.94573147 0.23195399]]
外面[],[]里面()或者[]都可以,不会报错
import numpy as np
b=np.random.rand(5,5)
print(b)
print(f'取出第四行到最后一行数据为:\n{b[3:]}')
>>>取出第四行到最后一行数据为:
[[0.78723266 0.2606867 0.31336913 0.43824877 0.23370714]
[0.26809932 0.37805853 0.87038233 0.8518646 0.55466361]]
Where函数会返回所有非零元素的索引
a=np.random.randint(1,5,5)
print(a)
b=np.where(a>3)
print(b)
>>>[2 4 1 4 4]
(array([1, 3, 4], dtype=int64),)
基本类型 | 可用Numpy类型 | 备注 |
---|---|---|
布尔型 | bool | 占1个字节 |
整型 | int8,int16,int32,int64,int128,int | int跟C语言中的unsigned long一样大 |
无符号整型 | float16,float32,float64,float,longfloat | uint 跟C语言中的unsigned long一样大 |
浮点数 | float16,float32,float64,float,longfloat | 默认为双精度float64,longfloat精度大小与系统有关 |
复数 | complex64,complex128,complex,longcomplex | 默认为complex128,即实部虚部都为双精度 |
字符串 | string,unicode | 可以使用dtype表示一个4字节字符串的数组 |
对象 | Object | 数组中可以使用任意值 |
时间 | datatime64,timedelta64 |
a=np.array([1,5,-3],dtype=float)
a=np.array([1,2,3])
np.asarray(a,dtype=float)
>>>array([1.,2.,3.])
a=np.array([1,2,3])
a.astype(float)
#>>>array([1.,2.,3.])
b=[956,456,789]
b=np.sort(b)
print(b)
>>>[456 789 956]
补充
b=[956,456,789]
b=np.argsort(b)
print(b)
>>>[1 2 0]
补充
Np.argsort(数组[行索引,列索引])
举例:
Np.argsort(b[0,:])
Np.argsort(b[:,0])
np.sum(数组名)
b=[956,456,789]
b=np.sum(b)
print(f'结果是{b}')
>>>结果是2201
np.max(数组名)
b=[956,456,789]
b=np.max(b)
print(f'结果是{b}')
>>>结果是956
np.mean()
b=[956,456,789]
b=np.mean(b)
print(f'结果是{b}')
>>>结果是733.6666666666666
还可以写成 b.mean()
np.std()
b=[956,456,789]
b=np.std(b)
print(f'结果是{b}')
>>>结果是207.84021640566957
a=np.array([546,888,777])
b=np.array([956,456,789])
corr_coef=np.corrcoef(a,b)
print(f'相关系数矩阵是:\n{corr_coef}')
>>>相关系数矩阵是:
[[ 1. -0.92519115]
[-0.92519115 1. ]]
Cov是协方差
import numpy as np
a=np.arange(6)//默认步长为1
print(a)
a.shape=2,3
print(a)
>>>[0 1 2 3 4 5]
[[0 1 2]
[3 4 5]]
np.reshape(m,n)
eg: a.reshape
reshape(m,-1)
将数组转换成m行的形式,加上-1意思为,列由计算机自行计算
a.T
a.transpose()
Concatenate((a0,a1,…aN),axis=0)
import numpy as np
a=np.arange(6)
a.shape=2,3
b=np.array([[2,5,7],[5,8,9]])
z=np.concatenate((a,b),axis=0)
print(f'a为\n{a}\nb为\n{b}\n拼接后的矩阵为{z}\n')
>>>
a为
[[0 1 2]
[3 4 5]]
b为
[[2 5 7]
[5 8 9]]
拼接后的矩阵为[[0 1 2]
[3 4 5]
[2 5 7]
[5 8 9]]
abs | 绝对值 |
---|---|
exp(a) | e的a次方 |
median | 求平均数 |
cumsum | 求累计和(返回一个矩阵,每个元素累积到这为止的一个累计和) |
np.matmul(arr1,arr2)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。