python数据分析之numpy

Numpy最重要的一个特点就是N维数组对象。就是我们通常说的矩阵。通过Numpy可以对矩阵进行快速的运算。首先来看下创建方法. 通过array的方法将一个嵌套列表转换为2行4列的矩阵数组。通过shape可以看到矩阵的维度
 
In [1]: data=[[1,2,3,4],[5,6,7,8]]
 
In [2]: import numpy as np
 
In [3]: arr=np.array(data)
 
In [4]: arr
Out[4]:  
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
In [6]: arr.shape
Out[6]: (2, 4)
 
In [7]: arr.dtype
Out[7]: dtype(‘int64‘)
 
除了array外,还有一些函数可以创建数组。比如zeros和ones可以分别创建指定长度的全0或全1数组。
In [8]: np.zeros(10)
Out[8]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
In [9]: np.zeros((3,6))
Out[9]:  
array([[ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.]])
In [10]: np.empty((2,3))
Out[10]:  
array([[  4.66186750e-310,   4.66186748e-310,   4.66186587e-310],
       [  6.91331345e-310,   0.00000000e+000,   0.00000000e+000]])
In [11]: np.ones((2,3))
Out[11]:  
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
从上面可以看到,empy产生的数都是一些未初始化过的值。其实使用起来没有实际的意义。还可以通过eye产生一个N×N的单位矩阵,也就是对角线都是1,其他位置为0的矩阵。
In [12]: np.eye(3)
Out[12]:  
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
 
前面用dtype的时候得到的结果是int64,也就是64位的整型。如果我们想得到浮点数或者32位的整数,该如何操作呢,同样的也是通过dtype来指定类型。
In [13]: arr=np.array(data,dtype=np.int32)
 
In [14]: arr.dtype
Out[14]: dtype(‘int32‘)
In [15]: arr=np.array(data,dtype=np.float32)
 
In [16]: arr
Out[16]:  
array([[ 1.,  2.,  3.,  4.],
       [ 5.,  6.,  7.,  8.]], dtype=float32)
dtype的类型和我们平常写代码的差不多,比如int8和uint8分别代表有符号的8位数和无符号的8位数。其中复数的表示方法:complex64,complex128,complex256来表示2个32位,64位,128位浮点数的复数
还有object和string_分别表示python对象类型和固定长度的字符串
 
如果针对已经生成的数组要想转换类型可以通过astype的方法来进行转换。
In [17]: arr.astype(np.int32)
Out[17]:  
array([[1, 2, 3, 4],
       [5, 6, 7, 8]], dtype=int32)
 
介绍完了数组的定义,下面来看下数组和标量之间的运算。这里的运算不是矩阵之间的相乘。而是数组相同位置的数组进行相乘
In [18]: arr*arr
Out[18]:  
array([[  1.,   4.,   9.,  16.],
       [ 25.,  36.,  49.,  64.]], dtype=float32)
 
In [19]: arr+arr
Out[19]:  
array([[  2.,   4.,   6.,   8.],
       [ 10.,  12.,  14.,  16.]], dtype=float32)
 
In [20]: 1/arr
Out[20]:  
array([[ 1.        ,  0.5       ,  0.33333334,  0.25      ],
       [ 0.2       ,  0.16666667,  0.14285715,  0.125     ]], dtype=float32)
 
In [21]: arr-arr
Out[21]:  
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]], dtype=float32)
 
切片:
ndarry的切片和Python列表的切片的用法是类似的
In [44]: arr1
Out[44]:  
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
 
In [45]: arr1[1:3]
Out[45]:  
array([[4, 5, 6],
       [7, 8, 9]])
 
In [46]: arr1[1:2]
Out[46]: array([[4, 5, 6]])
 
In [47]: arr1[1]
Out[47]: array([4, 5, 6])
 
In [48]: arr[1:4]
Out[48]: array([[ 5.,  6.,  7.,  8.]], dtype=float32)
 
In [49]: arr1[:2]
Out[49]:  
array([[1, 2, 3],
       [4, 5, 6]])
下面的两种方法代表分别从行和列分别进行切片。下面的第一个代表1行2列的元素
In [50]: arr1[1:2,2:3]
Out[50]: array([[6]])
 
这个代表1,2行和1,2列的元素
In [51]: arr1[1:3,1:3]
Out[51]:  
array([[5, 6],
       [8, 9]])
 
 
数组转置和轴对换
转置是矩阵函数中常用的操作。通过.T的操作就可以将矩阵转置
In [4]: arr
Out[4]:  
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])
 
In [5]: arr.T
Out[5]:  
array([[1, 5],
       [2, 6],
       [3, 7],
       [4, 8]])
既然能够转置,那么也就能够进行内积运算,通过np.dot就可以进行计算
 
In [6]: np.dot(arr.T,arr)
Out[6]:  
array([[26, 32, 38, 44],
       [32, 40, 48, 56],
       [38, 48, 58, 68],
       [44, 56, 68, 80]])
另外如果通过np.array()申明矩阵的时候是一维的,想改造成多维的话就需要用到resharp函数
In [11]: arr
Out[11]:  
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
使用resharp的时候需要注意的是行,列数要和数字的数目能够对应得上,比如15个数字对应的就是3行4列或者4行3列。如果不能满足的话就会报如下的错误
In [9]: arr=np.arange(15).reshape((3,4))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-12cfece7f834> in <module>()
----> 1 arr=np.arange(15).reshape((3,4))
 
ValueError: cannot reshape array of size 15 into shape (3,4)
 
 
通用函数:
在numpy中也默认了提供了很多数学运算函数。可以对矩阵数据进行各种的运算
如开平方:
In [13]: np.sqrt(arr)
Out[13]:  
array([[ 0.        ,  1.        ,  1.41421356,  1.73205081,  2.        ],
       [ 2.23606798,  2.44948974,  2.64575131,  2.82842712,  3.        ],
       [ 3.16227766,  3.31662479,  3.46410162,  3.60555128,  3.74165739]])
指数运算:
In [14]: np.exp(arr)
Out[14]:  
array([[  1.00000000e+00,   2.71828183e+00,   7.38905610e+00,
          2.00855369e+01,   5.45981500e+01],
       [  1.48413159e+02,   4.03428793e+02,   1.09663316e+03,
          2.98095799e+03,   8.10308393e+03],
       [  2.20264658e+04,   5.98741417e+04,   1.62754791e+05,
          4.42413392e+05,   1.20260428e+06]])
对数运算:
In [15]: np.log(arr)
/usr/local/bin/ipython:1: RuntimeWarning: divide by zero encountered in log
  #!/usr/bin/python
Out[15]:  
array([[       -inf,  0.        ,  0.69314718,  1.09861229,  1.38629436],
       [ 1.60943791,  1.79175947,  1.94591015,  2.07944154,  2.19722458],
       [ 2.30258509,  2.39789527,  2.48490665,  2.56494936,  2.63905733]])
 
这些都是一元函数,接受一个参数也就是数据本身就可以了。一元函数有下面这些:

另外还有二元函数,也就是输入2个参数,一个是数据本身,一个是和数据进行运算的参数。例如下面的这个例子,将矩阵的各个元素进行乘3处理

In [17]: np.multiply(arr,3)

Out[17]:

array([[ 0,  3,  6,  9, 12],

[15, 18, 21, 24, 27],

[30, 33, 36, 39, 42]])

二元函数有下面表格的这些

将条件逻辑表述为数组运算

如果我们有test1和test2两个数组,并且有cond作为判决条件。当cond中的值为True的时候选择test1的数据,当为False的时候选择test2的数据。

In [25]: test1=np.array([1,2,3,4,5])

In [26]: test2=np.array([6,7,8,9,10])

In [27]: cond=np.array([True,False,True,True,False])

我们自然而然会想到利用python中的ZIP函数来做

In [28]: result=[(x if c else y) for x,y,c in zip(test1,test2,cond)]

In [29]: result

Out[29]: [1, 7, 3, 4, 10]

但是面对大量数据的时候,这样的运行效率就比较低了,numpy自带了对应的函数也就是where来实现对应的功能。语法有更简单。cond作为第一个参数,如果为真就取第二个参数的数据,否则取第三个参数的数据

In [30]: result=np.where(cond,test1,test2)

In [31]: result

Out[31]: array([ 1,  7,  3,  4, 10])

where的第一个参数还可以是一个矩阵。这个例子中如果arr中的参数值大于3则为0,否则为-1

In [32]: arr

Out[32]:

array([[ 0,  1,  2,  3,  4],

[ 5,  6,  7,  8,  9],

[10, 11, 12, 13, 14]])

In [33]: result=np.where(arr>3,0,-1)

In [34]: result

Out[34]:

array([[-1, -1, -1, -1,  0],

[ 0,  0,  0,  0,  0],

[ 0,  0,  0,  0,  0]])

数学和统计方法:

numpy还提供了很多统计函数对数据进行统计运算,比如求平均,求方差等等。具体参考下表

In [35]: arr

Out[35]:

array([[ 0,  1,  2,  3,  4],

[ 5,  6,  7,  8,  9],

[10, 11, 12, 13, 14]])

In [36]: np.mean(arr)

Out[36]: 7.0

In [37]: np.std(arr)

Out[37]: 4.3204937989385739

In [38]: np.var(arr)

Out[38]: 18.666666666666668

有了这些方法,我们就可以针对不同的行或者列进行运算。比如下面的元算就是计算第一列的所有数据平均值

In [43]: np.mean(arr[0:3,0:1])

Out[43]: 5.0

保存到文件:

通过save可以将arr的数据保存到test文件,后缀名为npy。然后通过load将文件的内容加载进来。这里保存的路径是当前的工作路径

In [45]: np.save(‘test‘,arr)

In [46]: ret=np.load(‘test.npy‘)

In [47]: ret

Out[47]:

array([[ 0,  1,  2,  3,  4],

[ 5,  6,  7,  8,  9],

[10, 11, 12, 13, 14]])

也可以通过savez保存为一个压缩文件,其中可以通过设置参数保存多个数据。

In [49]: np.savez(‘test‘,a=arr,b=arr1)

在加载的时候,通过字典的方式得到各个不同的数据

In [51]: ret=np.load(‘test.npz‘)

In [52]: ret[‘a‘]

Out[52]:

array([[ 0,  1,  2,  3,  4],

[ 5,  6,  7,  8,  9],

[10, 11, 12, 13, 14]])

In [53]: ret[‘b‘]

Out[53]:

array([[ 1,  2,  3,  4,  5],

[ 6,  7,  8,  9, 10],

[11, 12, 13, 14, 15]])

原文地址:https://www.cnblogs.com/zhanghongfeng/p/8367322.html

时间: 2024-08-26 09:32:07

python数据分析之numpy的相关文章

Python——数据分析,Numpy,Pandas,matplotlib

由于图片内容太多,请拖动至新标签页再查看 Python--数据分析,Numpy,Pandas,matplotlib 原文地址:https://www.cnblogs.com/Jery-9527/p/10804069.html

python数据分析之numpy+pandas+scipy+matplotlib+scikit-learn安装

摘要 利用python来进行数据分析的时候,需要安装一些常见的工具包,如numpy,pandas,scipy等等,在安装的过程中,经常遇到一些安装细节的问题,如版本不匹配,需要依赖包没有正确安装等等,本文汇总梳理了下几个必要安装包的安装步骤,希望对读者有帮助,环境是windows 64 bit+python2.7.11. 一.安装python2.7.11 进入官网:https://www.python.org/downloads/release/python-2711/ 下载如下的连接: 下载之

python入门、python数据分析(numpy、matplotlib、sklearn等)tensflow、爬虫、机器学习、深度学习、自然语言处理、数据挖掘、机器学习项目实战、python全栈、PHP、java、java web、openCV、hadoop、matlab、android、数据结构算法和刷题等教学视频

扫描二维码加好友购买视频,绝对优惠,谢谢支持. python入门和进阶熟练教学视频 入门: 进阶: python数据分析教学视频 python数据分析晋级班 tensorflow教程及实战 python爬虫教学 机器学习课程 深度学习课程 机器学习项目班 自然语言处理教学视频 python全栈教学视频 数据挖掘视频 PHP教学视频 java java web openCV教学视频 Hadoop教学视频 matlab教学 andriod教学视频 数据结构算法班及面试班 原文地址:https://w

Python数据分析之numpy学习

Python模块中的numpy,这是一个处理数组的强大模块,而该模块也是其他数据分析模块(如pandas和scipy)的核心. 接下面将从这5个方面来介绍numpy模块的内容: 1)数组的创建 2)有关数组的属性和函数 3)数组元素的获取--普通索引.切片.布尔索引和花式索引 4)统计函数与线性代数运算 5)随机数的生成 数组的创建 numpy中使用array()函数创建数组,array的首个参数一定是一个序列,可以是元组也可以是列表. 一维数组的创建 可以使用numpy中的arange()函数

(转)Python数据分析之numpy学习

原文:https://www.cnblogs.com/nxld/p/6058572.html Python模块中的numpy,这是一个处理数组的强大模块,而该模块也是其他数据分析模块(如pandas和scipy)的核心. 接下面将从这5个方面来介绍numpy模块的内容: 1)数组的创建 2)有关数组的属性和函数 3)数组元素的获取--普通索引.切片.布尔索引和花式索引 4)统计函数与线性代数运算 5)随机数的生成 数组的创建 numpy中使用array()函数创建数组,array的首个参数一定是

Python数据分析之Numpy入门

目录 1.什么是numpy 2.安装numpy 3.n维数组对象 4.数组创建 5.数组维度 6.数组元素个数 7.数组元素数据类型 8.改变数组形状 9.数组索引和切片操作 10.数组转换与元素迭代 11.数组级联操作 12.数组数值舍入 13.数组数值添加 14.数组元素去重 15.常用数学函数 16.常用统计函数 17.矩阵运算 1.什么是numpy NumPy(Numerical Python)是Python语言中做科学计算的基础库.重在于数值计算,也是大部分Python科学计算库的基础

python数据分析之numpy、matplotlib的使用

5.3 Python的科学计算包 - Numpy numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算.这个库的前身是1995年就开始开发的一个用于数组运算的库.经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架. numpy在Linux下的安装已经在5.1.2中作为例子讲过,Windows下也可以通过pip,或者到下面网址下载: Obtaining NumPy & Sci

【Python 数据分析】Numpy模块

Numpy模块可以高效的处理数据,提供数组支持.很多模块都依赖他,比如:pandas.scipy.matplotlib 安装Numpy 首先到网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/下查找numpy+mkl 我的Python版本是3.6.1,系统是64位 所以对应下载的包为: 下载好包之后,进入到包所在目录(例如:D:\安装包\安装包~Python\numpy-1.13.3+mkl-cp36-cp36m-win_amd64.whl) 使用如下命

Python数据分析I

Python数据分析概述 数据分析的含义与目标 统计分析方法 提取有用信息 研究.概括.总结 Python与数据分析 Python: Guido Van Rossum Christmas Holiday, 1989 特点:简介 开发效率搞 运算速度慢(相对于C++和Java) 胶水特性(集成C语言) 数据分析:numpy.scipy.matplotlib.pandas.scikit-learn.keras Python数据分析大家族 numpy(Numeric Python): 数据结构基础.是