Python数据分析工具之numpy

numpy

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

下面是具体的案列实现,包括了numpy大部分常规操作,可以让开发者快速了解到numpy的使用过程。

#!/usr/bin/python
# -*- coding: utf-8 -*-
# author : acker
# date : 2020/11/2
import numpy as np
# 创建一维数组的方式
print("创建数组的方式")
arrs_a = np.arange(1,7).astype(int)
# arrs_b = np.array(range(1,7),dtype=int)
# arrs_c = np.array([1,2,3,4,5,6],dtype=int)
print('arrs_a\n',arrs_a)
# 创建二维数组的方式
arrs_aa = np.array([np.arange(1,4),np.arange(4,7)])
# arrs_aa = np.array([[1,2,3],[4,5,6]])
print('arrs_aa\n',arrs_aa)
print('*'*100)


# 查看数组的形状
print('查看数组的形状')
print('arrs_a的维度是:',arrs_a.shape)
print('arrs_aa的维度是:',arrs_aa.shape)
# 修改数组的形状
print('修改数组的形状')
print('arrs_a修改后\n',arrs_a.reshape(2,3))
print('arrs_aa修改后\n',arrs_aa.reshape(6,))
print('flatten将数组转换为一维数组\n',arrs_aa.flatten())
print('*'*100)


print('广播机制')
# 广播机制
print('加减乘除法会广播到每一个元素上,例如+1\n',arrs_a+1)
# 两个数组对应的最后存储的元素个数要相同才可以进行相应操作
# 例如shape为(2,2)的数组与shape为(2,3)的数组因为最后维度存储的个数不同会导致广播机制不能传播
# 例如shape为(2,2,3)的数组与shape为(1,1,3)不管其是几维数组只要其最后存储的元素个数相同就可以进行广播
print('数组与数组间的加减乘除,必须要最后的维度相同才可以进行,例如\n',np.array([1,2,3])+arrs_aa)
print('多维数组的加减乘除,例如\n',np.array([[[1,1,1],[1,1,1]],[[2,2,2],[2,2,2]]])+np.array([[[2,2,2]]]))
print('*'*100)


print('轴的概念')
# numpy中可以理解为方向使用0,1,2数字来表示不同的维度,
# 一维数组只有0轴,相当于只有x轴的概念
print('一维数组x为6\n',np.arange(6))
# 二维数组只有0,1轴,相当于x、y轴的概念,0表示为行数,1表示为列数
print('二维数组x为2,y为3\n',np.array([np.arange(3),np.arange(3)]))
# 三维数组只有0,1,2轴,相当于z、x、y轴的概念,0表示为块数,1表示为行数,2表示列数
print('三维数组z为1,x为2,y为3\n',np.array([[np.arange(3),np.arange(3)]]))
print('*'*100)


print('数组的转置')
print('arrs_aa\n',arrs_aa)
print('arrs_aa.transpose()\n',arrs_aa.transpose())
print('arrs_aa.T\n',arrs_aa.T)
# 转置与交换轴的效果一样
print('arrs_aa.swapaxes(1,0)\n',arrs_aa.swapaxes(1,0))
print('*'*100)

print('numpy索引和切片')
# 取出操作与数组的操作基本相似,只是增加了对x,y两个轴的取值方式arrs_aa[:,:],
print('arrs_aa\n',arrs_aa)
print('取arrs_aa的一行数据\n',arrs_aa[0])
print('取arrs_aa的一列数据\n',arrs_aa[:,0])
print('取arrs_aa的第一行的第一和第二列数据\n',arrs_aa[0,0:2])
print('*'*100)


print('numpy中布尔索引')
print('arrs_aa\n',arrs_aa)
print(arrs_aa<2)
# 修改了元数据
_arrs_aa = arrs_aa.copy()
_arrs_aa[_arrs_aa<2]=0
# 没有修改元数据,重新构造一个新的数组返回
# arrs_temp = np.where(arrs_aa<2,0,10)
print(arrs_aa)
print('*'*100)


print('numpy中的nan和inf')
# nan(NAN,Nan):not a number表示不是一个数字
# 读取为float,如果丢失,就会出现nan。
# nan与nan的值是不等的。
# nan与任何值计算都为nan
# inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷 如果有个数字除以0,例如:
# python中会将0表示为极小值,就会得出有个极大(小)值,就会导致程序报错出现inf
arrs_nan = np.arange(6).astype(float)
arrs_nan[1] = np.nan
print('arrs_nan\n',arrs_nan)
print('判断nan的个数',np.count_nonzero(arrs_nan!=arrs_nan))
print('判断是否为nan',np.isnan(arrs_nan))
print('*'*100)


print('numpy中常用统计函数')
print('arrs_aa\n',arrs_aa)
print('求和:',arrs_aa.sum()      )
print('均值(受离群点的影响较大):',arrs_aa.mean()  )
print('中值:',np.median(arrs_aa))
print('最大值',arrs_aa.max()     )
print('最小值',arrs_aa.min()     )
print('极值(即最大值和最小值只差):',np.ptp(arrs_aa) )
print('标准差',arrs_aa.std()     )
print('*'*100)


print('numpy中数组的拼接')
print('arrs_a\n',arrs_a.reshape(2,3))
print('arrs_aa\n',arrs_aa)
print('竖直拼接np.vstack((t1,t2))]\n',np.vstack((arrs_a.reshape(2,3),arrs_aa)))
print('水平拼接np.hstack((t1,t2))]\n',np.hstack((arrs_a.reshape(2,3),arrs_aa)))

# 获取最大值最小值的位置
#   np.argmax(t,axis=0)
#   np.argmin(t,axis=1)
# 创建一个全0的数组: np.zeros((3,4))
# 创建一个全1的数组:np.ones((3,4))
# 创建一个对角线为1的正方形数组(方阵):np.eye(3)

print('numpy的注意点copy和view')
# a=b 完全不复制,a和b相互影响
# a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
# a = b.copy(),复制,a和b互不影响
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值