t2=np.array(range(10))
# t2=[0 1 2 3 4 5 6 7 8 9]
t3=np.arange(10)
# t3=[0 1 2 3 4 5 6 7 8 9]
t4=np.arange(4,10,2)
# t4=[4 6 8]
arange:生成的数据类型是 数组(numpy.ndarray)。
range:生成的数据类型是列表(list)。
a=np.arange(10)
print(a.dtype) # int32
改变数组中数据的类型
b=a.astype('int64')
print(b.dtype) # int64
修改数组中浮点型数据的小数位数
import random
c=np.array([random.random() for i in range(10)])
d=np.round(c,3)
一维数组
t1=np.arange(5)
print(t1) # [0 1 2 3 4]
print(t1.shape) # (5,),表示数组为一维数组,有5个元素。
二维数据
t2=np.array([[1,2,3],[4,5,6]])
print(t2)
'''
[[1 2 3]
[4 5 6]]
'''
print(t2.shape) # (2, 3),表示数组为二维数组,2行3列。
三维数组
t3=np.array([[[1,1,1,1],[2,2,2,2],[3,3,3,3]],[[4,4,4,4],[5,5,5,5],[6,6,6,6]]])
print(t3)
'''
[[[1 1 1 1]
[2 2 2 2]
[3 3 3 3]]
[[4 4 4 4]
[5 5 5 5]
[6 6 6 6]]]
'''
print(t3.shape) # (2, 3, 4),表示三维数组,2层3行4列
修改形状:a.reshape
a=np.array(range(6))
b=a.reshape((2,3)) # b为2行3列的二维数组, a仍为有6个元素的一维数组。
b.reshape((6,1)) # 6行1列的二维数组
b.reshape((1,6)) # 1行6列的二维数组
b.reshape((6,)) # 6个元素的一维数组
b.flatten() # 将数组b展开为一维数组
数组与数字之间的运算
a=np.arange(0,10).reshape((2,5))
b=a+2 # 每个元素都加上2
b=a-2 # 每个元素都减去2
b=a*2 # 每个元素均乘以2
b=a/2 # 每个元素都除以2
相同形状的数组与数组之间的运算
a=np.arange(0,10).reshape((2,5))
b=np.arange(10,20).reshape((2,5))
c=a+b # 对应元素相加
c=a-b # 对应元素相减
c=a*b # 对应元素相乘
c=a/b # 对应元素相除
不同形状的数组与数组之间的运算
a=np.arange(0,10).reshape((2,5))
b=np.array(2).reshape((2,1))
c=np.array(5)
d=np.arange(0,10)
m=a-b # 行相同,都为2,a的每一行的每个元素减去b中对应行的元素
m=a-c # 列相同,都为5,a的每一列的每个元素减去c中对应列的元素
m=a-d # 行、列均不相同,无法进行减法运算。
numpy从csv文件中读取数据
np.loadtxt(frame,delimiter=',',dtype=int,skiprows=0,unpack=False)
# frame:csv文件,所在的位置
# delimiter:csv文件中的数据,按照哪种符号分隔数据,比如:“,”、“;”等
# dtype:获取的数据按照哪种数字类型进行存储,比如:int,float等
# skiprows:获取的数据从csv文件的第几行开始获取。
# unpack:如果为False,每一行的数据组成一行;如果为True,每一列的数据组成一行,即为False结果的转置。
numpy中实现转置的三种方法
a=np.arange(10).reshape((2,5))
b=a.transpose()
b=a.T
b=a.swapaxes(1,0)
numpy的切片和索引
取不连续的多行数据
a=np.arange(20).reshape((4,5))
b=a[[0,1,3]] # 取第0、1、3行数据
b=a[:,[0,2,4]] # 取第0、2、4列数据
竖直拼接(vertically)
a=np.arange(0,10).reshape((2,5)) # 2行5列
b=np.arange(10,20).reshape((2,5)) # 2行5列
c=np.vstack((a,b)) # 4行5列
水平拼接(horizontally)
a=np.arange(0,10).reshape((2,5)) # 2行5列
b=np.arange(10,20).reshape((2,5)) # 2行5列
c=np.hstack((a,b)) # 2行10列
a=np.arange(10).reshape((2,5))
a[0,3]=0
a=np.arange(10).reshape((2,5))
a[a<5]=10 # 将a中小于5的元素全部修改为10
a=np.arange(10).reshape((2,5))
b=np.where(a<5,0,10) # 将a中小于5的元素全部修改为0,大于5的元素全部修改为10
a=np.arange(10).reshape((2,5))
b=a.clip(3,7) # 将a中小于3的元素全部修改为3,a中大于7的元素全部修改为7.
a=np.arange(15).reshape((3,5))
a[[0,2],:]=a[[2,0],:] # 行交换
a[:,[1,3]]=a[:,[3,1]] # 列交换
获取最大值最小值的位置
a=np.arange(10).reshape((2,5))
b=np.argmax(a,axis=0) # 返回a中所有行的最大值的索引
b=np.argmin(a,axis=1) # 返回a中所有列的最小值的索引
创建一个全为0的数组:np.zeros((2,5))
创建一个全为1的数组:np.ones((2,5))
创建一个对角线为1的正方形数组:np.eye(3)
nan:not a number ,0除以0的结果,float。
两个nan是不相等的
print(np.nan==np.nan) # False
利用上面的特性,可以判断数组中nan的个数
a=np.array([1.,2.,3.,np.nan,np.nan])
print(np.count_nonzero(a!=a)) # 2
print(np.count_nonzero(np.isnan(a))) # 2
a[np.isnan(a)]=0 # 将a中的nan值替换为0
注意:nan和任何值计算都为nan。
inf:infinity,无穷大,0以外的数字除以0的结果,float。
a=np.arange(10).reshape((2,5))
求和:a.sum(axis=None)
均值:a.mean(axis=None)
,受离群点的影响较大
中值:np.median(a,axis=None)
最大值:a.max(axis=None)
最小值:a.min(axis=None)
极值:np.ptp(a,axis=None)
,即最大值和最小值的差
标准差:a.std(axis=None)
,方差的二分之一次方。
如果不指定axis,则默认返回多维数组的全部数据的统计结果
1、学习视频