数据分析——numpy

数组的创建
一:array 创建数组
语法格式:

numpy.array(object,dtype =None,copy=True,order=None,subok=False,ndmin =0)

array参数说明

名称描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默 认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度

代码示例:

import numpy as np

# 使用array函数创建一维数组
a = np.array([1,2,3,4])
print(a)
print(type(a))

# 使用array创建二维数组
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(b)
print(type(b))

# 使用array创建三维数组
c = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
print(c)
print(type(c))

# array函数中dtype的使用
# dtype:设置数组的参数类型
d = np.array([3,4,5],dtype=float)
print(d)
print(type(d))

# array函数中的ndim的使用
# ndmin :设置数组的维度
e = np.array([5,6,7],dtype=float,ndmin=3)
print(e)
print(type(e))

结果如下:
在这里插入图片描述
二:使用arange 创建数组
使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start,stop,step,dtype)

arange 参数说明

参数描述
start起始值,默认为 0
stop终止值(不包含)
step步长,默认为 1
dtype返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型。

代码示例:

# 导入numpy
# 导入numpy
import  numpy as np
# range 的使用range(start,end,step) :[start,end)
a = list((range(1,10))) #步长为1
print(a)
b = list(range(10)) #默认的是从0 开始,步长是1
print(b)
c = list(range(1,10,3)) #指定步长为3
print(c)

# 使用arange创建一维数组
a1 = np.arange(1,11)
print(a1)


# 设置step 步长
a2 = np.arange(1,11,2)
print(a2)

# 设置dtype
ac = np.arange(10,20,3,dtype=float)
print(ac)

# 使用arange创建二维数组
b=np.array([np.arange(1,4),np.arange(4,7),np.arange(7,10)])
print(b)
print('b 数组的维度:',b.shape)

结果如下:
在这里插入图片描述
随机数创建
格式如下:
生成随机数:
该方法返回[0.0, 1.0)范围的随机数。

 numpy.random.random(size=None) 

生成随机整数:
该方法有三个参数 low、high、size 三个参数。默认 high 是 None,如果只有 low,那 范围就是[0,low)。如果有 high,范围就是[low,high)。

numpy.random.randint() 

生成标准正态分布
语法格式:

numpy.random.randn(d0,d1,,dn)

randn 函数返回一个或一组样本,具有标准正态分布(期望为 0,方差为 1)。
dn 表格每个维度
返回值为指定维度的 array

生成指定期望和方差的正态分布

#正太分布(高斯分布)loc:期望 scale:方差size形状 print(np.random.normal(loc=3,scale=4,size=(2,2,3))) 

代码示例如下:

import numpy as np

def creatRandom():
    # 使用random创建一维数组
    a = np.random.random(size=5) #创建5个[0,1)的数
    print(a)
    # 创建二维数组
    b = np.random.random(size=(3,4))
    print(b)
    # 创建三维数组
    c = np.random.random(size=(2,3,4))

def createRandomInt():
    # 创建随机整数
    # randint(low, high=None, size=None, dtype=int) 左闭右开
    a = np.random.randint(6,size=10) #生成10个0-5的整数
    print(a)
    print(type(a))

    #生成5-10 之间的随机整数 二维
    b = np.random.randint(5,11,size=(4,3))
    print(b)
    print(type(b))

    #生成5-10 之间的随机整数,三维
    c = np.random.randint(5,11,size=(2,4,3))
    print(c)

    # dtype 的使用
    d = np.random.randint(10,size=10)
    print('默认的dtype:',d.dtype)

    d1 = np.random.randint(10,size=5,dtype=np.int64)
    print('默认的dtype:',d1.dtype)


# createRandomInt()


def randnTest():
    # 创建标准的正太分布

    a = np.random.rand(4)
    print(a)

    # 创建二维是数组
    b = np.random.randn(2,3)
    print(b)

    c = np.random.randn(2,3,4)
    print(c)

# randnTest()

#创建指定期望和方差的正太分布
def normalTest():
    a=np.random.normal(size=5)  #默认的期望是loc=0.0  方差scale=1.0
    print(a)

    #指定期望和方差
    b=np.random.normal(loc=2,scale=3,size=(3,4))
    print(b)

normalTest()

ndarray 对象
ndarray 对象属性

属性说明
ndarray.ndim秩,即轴的数量或维度的数量
ndarray.shape数组的维度,对于矩阵,n 行 m 列
ndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtypendarray 对象的元素类型
ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位
ndarray.flagsndarray 对象的内存信息
ndarray.realndarray 元素的实部
ndarray.imagndarray 元素的虚部
ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。
#导入numpy
import numpy as np
#创建一维的数组
a=np.array([1,2,3,4])
print(a)
#创建二维数组
b=np.random.randint(4,10,size=(2,3))
print(b)
#创建三维数组
c=np.random.randn(2,3,4)
print(c)

#ndim属性:数组的维度
print('ndim:',a.ndim,b.ndim,c.ndim)

#shape属性:数组的形状
print('shape:',a.shape,b.shape,c.shape)

#dtype属性:数组的参数类型
print('dtype:',a.dtype,b.dtype,c.dtype)

#size 元素的总个数
print('size:',a.size,b.size,c.size)

#itemsize  每个元素所占的字节
print('itemsize:',a.itemsize,b.itemsize,c.itemsize)

在这里插入图片描述
其他方式创建创建数组
zeros 创建指定大小的数组,数组元素以 0 来填充:
语法格式:

numpy.zeros(shape, dtype

代码示例:

import numpy as np
x=np.zeros(5)
print(x)
#设置类型为整数
y=np.zeros((5,),dtype=int) 
print(y)

# 生成二维数组
z=np.zeros((2,2))
print(z)

结果如下:
在这里插入图片描述

numpy.ones 创建指定形状的数组,数组元素以 1 来填充:
语法格式:

numpy.ones(shape, dtype = None, order = 'C')

代码示例:

import numpy as np
x=np.ones(5)
print(x)
y=np.ones((3,4),dtype=int)
print(y)

结果如下:
在这里插入图片描述

numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的 数组,里面的元素的值是之前内存的值

numpy.empty(shape, dtype = float, order = 'C')

empty参数说明:

参数描述
shape数组形状
dtype数据类型,可选
order有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存 中的存储元素的顺序。

代码如下:

import numpy as np
x=np.empty([3,2],dtype=int)
print(x)

结果如下:
在这里插入图片描述

linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

linspace 参数说明

参数描述
start序列的起始值
stop序列的终止值,如果 endpoint 为 true,该值包含于数列中
stop要生成的等步长的样本数量,默认为 50
endpoint该值为 ture 时,数列中中包含 stop 值,反之不包含,默认是 True。
retstep如果为 True 时,生成的数组中会显示间距,反之不显示。
dtypendarray 的数据类型

代码如下:

import numpy as np
x=np.linspace(10,20,5,endpoint=True,retstep=True)
print(x)

结果如下:
在这里插入图片描述

numpy.logspace 函数用于创建一个于等比数列。
格式如下:

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

logspace 参数说明:

参数描述
start序列的起始值为:base ** start
stop序列的终止值为:base ** stop。如果 endpoint 为 true,该值包含于数列中
num要生成的等步长的样本数量,默认为 50
endpoint该值为 ture 时,数列中中包含 stop 值,反之不包含,默认是 True。
base对数 log 的底数
dtypendarray 的数据类型

代码示例:

import numpy as np
x=np.logspace(0,9,10,base=2)
print(x)

结果如下:
在这里插入图片描述
切片和索引

  1. ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作 一样。
  2. ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop 及 step 参数进行,从
    原数组中切割出一个新数组。
    一维数组切片和索引的使用
    代码示例:
import numpy as np
x=np.arange(10)
y=x[2:7:2]
z=x[2:]
print(y) 
print(z)

结果如下:
在这里插入图片描述
根据索引直接获取
代码示例:

import numpy as np
x=np.arange(1,13)
a=x.reshape(4,3)
print('数组元素')
print(a)
print('获取第二行')
print(a[1]) 
print('获取第三行第二列')
print(a[2][1])

结果如下:
在这里插入图片描述
二维数组切片的使用
代码示例:

import numpy as np
x=np.arange(1,13)
a=x.reshape(4,3)
print('数组元素')
print(a)
#使用索引获取
print('所有行的第二列') 
print(a[:,1])
print('奇数行的第一列')
print(a[::2,0])

结果如下:
在这里插入图片描述
使用坐标获取数组[x,y]
代码示例:

import numpy as np
x=np.arange(1,13)
a=x.reshape(4,3)
#使用索引获取
print('所有行的第二列')
print(a[:,1])
print('奇数行的第一列')
print(a[::2,0])
print('获取第三行第二列')
print(a[2,1])
print('同时获取第三行第二列,第四行第一列')
print(np.array((a[2,1],a[3,0])))
print(a[(2,3),(1,0)])

结果如下:
在这里插入图片描述
索引为负数来获取

import numpy as np
x=np.arange(1,13)
a=x.reshape(4,3)
#使用索引获取
print('获取最后一行')
print(a[-1])
print('行进行倒序')
print(a[::-1])
print('行列都倒序')
print(a[::-1,::-1])

在这里插入图片描述
所有切片取出来的数组,即使你把它赋值给了新的变量,它仍有全都是原来数组的视图。
切片数组的复制
代码示例:

import numpy as np
a=np.arange(1,13).reshape(3,4)
print('数组元素')
print(a)
sub_array=a[:2,:2]
sub_array[0][0]=1000
print(a)
print(sub_array)
print('copy'*20)
sub_array=np.copy(a[:2,:2])
sub_array[0][0]=2000
print(a)
print(sub_array)

结果如下:在这里插入图片描述
改变数组的维度
处理数组的一项重要工作就是改变数组的维度,包含提高数组的维度和降低数组的维 度,还包括数组的转置。Numpy 提供的大量 API 可以很轻松地完成这些数组的操作。例如, 通过 reshape 方法可以将一维数组变成二维、三维或者多维数组。通过 ravel 方法或 flatten 方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置 Numpy 数组的 shape 属性(元组类型),通过 resize 方法也可以改变数组的维度

#导入numpy模块
import numpy as np
#通过reshape将一维数组修改为二、三维
#创建一个一维数组
a=np.arange(1,25)
print(a)
#将一维修改为二维 (2,12) (4,6) (3,8)
# b=a.reshape(4,6)
b=a.reshape((3,8))
print(b)

#将一维修改为三维  (2,3,4)
c=a.reshape((2,3,4))
print(c)

#通过np.reshape()进行修改
# bb=np.reshape(a,(3,8)) #将一维修改为二维
bb=np.reshape(a,(4,3,2))#将一维修改为三维
print(bb)

#将多维数组修改为一维数组
# a=bb.reshape(24)
a=bb.reshape(-1)
print(a)
#通过 ravel、flatten函数将多维数组转换为一维数组
# ravel
a=bb.ravel()
print(a)

# flatten
a=bb.flatten()
print(a)

数组的拼接
水平数组组合 通过 hstack 函数可以将两个或多个数组水平组合起来形成一个数组,那么什么叫做数组 的水平组合。
垂直数组组合 通过 vstack 函数可以将两个或多个数组垂直组合起来形成一个数组
数组的拼接:

函数描述
concatenate连接沿现有轴的数组序列
hstack水平堆叠序列中的数组(列方向)
vstack竖直堆叠序列中的数组(行方向)

numpy.concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1, a2, ...), axis)

参数说明:

  • a1, a2, …:相同类型的数组
  • axis:沿着它连接数组的轴,默认为 0
    concatenate 实现数组的拼接
    numpy.hstack 它通过水平堆叠来生成数组。
    numpy.vstack 它通过垂直堆叠来生成数组。

注意如果拼接的行和列数目不同,则会报错

  • axis=0 可以使用 vstack 替换
  • axis=1 可以使用 hstack 替换
  • axis=2 可以使用 dstack 替换
#导入numpy
import numpy as np
#创建两个数组
a=np.array([[1,2,3],[4,5,6]])
b=np.array([[11,12,13],[14,15,16]])
print(a)
print(b)
#使用hstack进行水平拼接
# r=np.hstack([a,b])
r=np.hstack((a,b))
print(r)

#使用vstack进行垂直方向拼接
r=np.vstack((a,b))
print(r)

#concatenate的使用
print('axis=0 默认情况  垂直方向拼接  相当于vstack')
r1=np.concatenate((a,b),axis=0)
r2=np.concatenate((a,b))
print(r1)
print(r2)

# 二维数组有两个轴 axis=0   axis=1
print('axis=1   水平方向拼接  相当于hstack')
r3=np.concatenate((a,b),axis=1)
print(r3)

#三维数组有三个轴  axis=0 1 2
a=np.arange(1,13).reshape(1,2,6)
print(a,a.shape)
b=np.arange(101,113).reshape(1,2,6)
print(b,b.shape)
print('三维 axis=0')
r1=np.concatenate((a,b),axis=0)
print(r1,r1.shape)

print('三维 axis=1')
r2=np.concatenate((a,b),axis=1)
print(r2,r2.shape)

print('三维 axis=2')
r3=np.concatenate((a,b),axis=2)
print(r3,r3.shape)

数组的分隔
split 分隔
numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)

参数说明:

  • ary:被分割的数组
  • indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的 位置。
  • axis:沿着哪个维度进行切向,默认为 0,横向切分。为 1 时,纵向切分。
    代码示例:
import numpy as np
x=np.arange(1,9)
a=np.split(x,4)
print(a)
print(a[0])
print(a[1])
print(a[2])
print(a[3]) 

#传递数组进行分隔
b=np.split(x,[3,5]) 
print(b)

结果如下:
在这里插入图片描述
split 分隔二维数组
代码示例:

import numpy as np
#创建两个数组
a=np.array([[1,2,3],[4,5,6],[11,12,13],[14,15,16]])
print('axis=0 垂直方向 平均分隔')
r=np.split(a,2,axis=0)
print(r[0])
print(r[1]) 
print('axis=1 水平方向 按位置分隔')
r=np.split(a,[2],axis=1)
print(r)

结果如下:在这里插入图片描述
水平分隔使用 hsplit 函数可以水平分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组, 第 2 个参数表示要将数组水平分隔成几个小数组
代码示例:

import numpy as np
grid=np.arange(16).reshape(4,4) 
a,b=np.hsplit(grid,2) 
print(a) 
print(b)

结果如下:
在这里插入图片描述
垂直分隔数组使用 vsplit 函数可以垂直分隔数组,该函数有两个参数,第 1 个参数表示待分隔的数组, 第 2 个参数表示将数组垂直分隔成几个小数组。
代码示例:

import numpy as np
grid=np.arange(16).reshape(4,4)
a,b=np.vsplit(grid,[3])
print(a) 
print(b)
print('三部分'*10)
a,b,c=np.vsplit(grid,[1,3])
print(a)
print(b)
print(c)

结果如下:
在这里插入图片描述
transpose 进行转换
代码示例:

import numpy as np
#二维转置
a=np.arange(1,13).reshape(2,6)
print('原数组 a')
print(a)
print('转置后的数组')
print(a.transpose()) 
#多维数组转置
aaa=np.arange(1,37).reshape(1,3,3,4)
#将 1,3,3,4 转换为 3,3,4,1
print(np.transpose(aaa,[1,2,3,0]).shape)

结果如下:
在这里插入图片描述
算术函数
如果参与运算的两个对象 都是 ndarray,并且形状相同,那么会对位彼此之间进行(+ - * /)运算。NumPy 算术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
代码示例:

import numpy as np
a=np.arange(9,dtype=np.float).reshape(3,3)
b=np.array([10,10,10])
print('第一个数组')
print(a)
print('第二个数组')
print(b)
print('两数组进行加法运算 add')
print(np.add(a,b))
print('两数组进行加法运算+')
print(a+b)
print('两数组进行减法运算 substract')
print(np.subtract(a,b))
print('两数组进行减法运算-')
print(a-b) 
print('两数组进行乘法运算 multiply')
print(np.multiply(a,b))
print('两数组进行乘法运算*')
print(a*b)
 # print('两数组进行除法运算')
# print(np.divide(a,b))

通用函数指定输出结果的用法
代码示例:

import numpy as np
x = np.arange(5)
y = np.empty(5)
print(y)
np.multiply(x, 10, out=y)
print(y)

结果如下:
在这里插入图片描述
数学函数
NumPy 提供了标准的三角函数:sin()、cos()、tan()。
代码示例:

import numpy as np
a = np.array([0,30,45,60,90])
print ('不同角度的正弦值:')
# 通过乘 pi/180 转化为弧度
print (np.sin(a*np.pi/180))
print ('数组中角度的余弦值:')
print (np.cos(a*np.pi/180))
print ('数组中角度的正切值:') 
print (np.tan(a*np.pi/180))

结果如下:
在这里插入图片描述
numpy.around() 函数返回指定数字的四舍五入值
语法格式:

numpy.around(a,decimals)

参数说明:

  • a: 数组
  • decimals: 舍入的小数位数。 默认值为 0。 如果为负,整数将四舍五入到小数点左侧的位 置
  • numpy.floor() 返回数字的下舍整数。
  • numpy.ceil() 返回数字的上入整数
    聚合函数
函数名说明
np.sum()求和
np.prod()所有元素相乘
np.mean()平均值
np.std()标准差
np.var()方差
np.median()中数
np.power()幂运算
np.sqrt()开方
np.min()最小值
np.max()最大值
np.argmin()最小值的下标
np.argmax()最大值的下标
np.inf无穷大
np.exp(10)以 e 为底的指数
np.log(10)对数

numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应 元素的幂
numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算
mean()的使用:

import numpy as np
a=np.arange(1,11).reshape(2,5) 
print('原来的数组') 
print(a)
print('调用 mean 函数') 
print(np.mean(a)) 
print('调用 mean 函数 axis=0 列') 
print(np.mean(a,axis=0)) 
print('调用 mean 函数 axis=1 行') 
print(np.mean(a,axis=1))

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值