python数据分析复盘——数据分析相关库之Numpy

来源:互联网 发布:memcached php 编辑:程序博客网 时间:2024/09/21 06:35

1.1 numpy简介

(1)numpy是以矩阵为基础的计算模块,纯数学。用来进行各种计算。

(2)numpy是一个开源的Python科学计算基础库,包含:
• 一个强大的N维数组对象 ndarray
广播功能函数
整合*C/C++/Fortran代码的工具*
线性代数、傅里叶变换、随机数生成等功能

(3)NumPy是SciPy、Pandas等数据处理或科学计算库的基础

(4)numpy存在的意义是什么?

python已经存在可以充当数组用的列表,为什么还需要一个新的数据结构。原因有:

• numpy的多维数组ndarray可以把整个维度甚至整个数组当作一个整体进行计算。省去循环遍历的步骤。
• 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
科学计算中,一个维度所有数据的类型往往相同。数组对象采用相同的数据类型,有助于节省运算和存储空间


1.2 numpy结构和基本操作

(1)多维数据结构

类似多维列表的数组,就是c语言的数组arrary类型。实际上numpy是用c写的,效率会比python高。

(2)numpy属性

这里写图片描述


(3)ndarray的元素类型

这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述


(4)numpy数组创建方法

两类创建方法:

  • 从Python中的列表、元组等类型创建ndarray数组
x = np.array(list/tuple, dtype=np.float32)#当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型
  • 使用NumPy中函数创建ndarray数组,如:arange, ones, zeros

    这里写图片描述
>>> np.arange(10)array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> np.ones((3,4))array([[ 1.,  1.,  1.,  1.],       [ 1.,  1.,  1.,  1.],       [ 1.,  1.,  1.,  1.]])>>> np.zeros((3,4),dtype=np.int32)array([[0, 0, 0, 0],       [0, 0, 0, 0],       [0, 0, 0, 0]])>>> np.eye(5)array([[ 1.,  0.,  0.,  0.,  0.],       [ 0.,  1.,  0.,  0.,  0.],       [ 0.,  0.,  1.,  0.,  0.],       [ 0.,  0.,  0.,  1.,  0.],       [ 0.,  0.,  0.,  0.,  1.]])>>> x = np.ones((2,3,4))>>> print(x)[[[ 1.  1.  1.  1.]  [ 1.  1.  1.  1.]  [ 1.  1.  1.  1.]] [[ 1.  1.  1.  1.]  [ 1.  1.  1.  1.]  [ 1.  1.  1.  1.]]]>>> x.shape(2, 3, 4)

这里写图片描述
这里写图片描述

>>> a =  np.linspace(1,10,4)>>> aarray([  1.,   4.,   7.,  10.])>>> b = np.linspace(1,10,4,endpoint=False)>>> barray([ 1.  ,  3.25,  5.5 ,  7.75])>>> c = np.concatenate((a,b))>>> carray([  1.  ,   4.  ,   7.  ,  10.  ,   1.  ,   3.25,   5.5 ,   7.75])
  • 从字节流(raw bytes)中创建ndarray数组

  • 从文件中读取特定格式,创建ndarray数组


(5)ndarray数组的维度变换

这里写图片描述

>>> a = np.ones((2,3,4), dtype=np.int32)>>> a.reshape((3,8))array([[1, 1, 1, 1, 1, 1, 1, 1],       [1, 1, 1, 1, 1, 1, 1, 1],       [1, 1, 1, 1, 1, 1, 1, 1]])>>> aarray([[[1, 1, 1, 1],        [1, 1, 1, 1],        [1, 1, 1, 1]],       [[1, 1, 1, 1],        [1, 1, 1, 1],        [1, 1, 1, 1]]])>>> a.resize((3,8))>>> aarray([[1, 1, 1, 1, 1, 1, 1, 1],       [1, 1, 1, 1, 1, 1, 1, 1],       [1, 1, 1, 1, 1, 1, 1, 1]])

(6)ndarray数组的类型变换

new_a = a.astype(new_type)

(7)ndarray数组向列表的转换

ls = a.tolist()

(8)ndarray索引和切片

  • 索引:获取数组中特定位置元素的过程
  • 切片:获取数组元素子集的过程
  • 一维数组的索引和切片:与Python的列表类似
  • 多维数组的切片也类似
    这里写图片描述

(9)ndarray数组与标量

数组与标量之间的运算作用于数组的每一个元素


(10)ndarray一元函数

这里写图片描述
这里写图片描述

>>> a = np.arange(24).reshape((2,3,4))>>> np.square(a)array([[[  0,   1,   4,   9],        [ 16,  25,  36,  49],        [ 64,  81, 100, 121]],       [[144, 169, 196, 225],        [256, 289, 324, 361],        [400, 441, 484, 529]]], dtype=int32)>>> a = np.sqrt(a)>>> aarray([[[ 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,  3.87298335],        [ 4.        ,  4.12310563,  4.24264069,  4.35889894],        [ 4.47213595,  4.58257569,  4.69041576,  4.79583152]]])>>> np.modf(a)(array([[[ 0.        ,  0.        ,  0.41421356,  0.73205081],        [ 0.        ,  0.23606798,  0.44948974,  0.64575131],        [ 0.82842712,  0.        ,  0.16227766,  0.31662479]],       [[ 0.46410162,  0.60555128,  0.74165739,  0.87298335],        [ 0.        ,  0.12310563,  0.24264069,  0.35889894],        [ 0.47213595,  0.58257569,  0.69041576,  0.79583152]]]), array([[[ 0.,  1.,  1.,  1.],        [ 2.,  2.,  2.,  2.],        [ 2.,  3.,  3.,  3.]],       [[ 3.,  3.,  3.,  3.],        [ 4.,  4.,  4.,  4.],        [ 4.,  4.,  4.,  4.]]]))

(11)ndarray二元函数

这里写图片描述


1.3 numpy文件存取与函数

(1).csv文件的写入和存取

只能有效存储一维和二维数组

np.savetxt(frame, array, fmt='%.18e', delimiter=None)
• frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• array : 存入文件的数组
• fmt : 写入文件的格式,例如:%d %.2f %.18e
• delimiter : 分割字符串,默认是任何空格

np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)• frame : 文件、字符串或产生器,可以是.gz.bz2的压缩文件• dtype : 数据类型,可选• delimiter : 分割字符串,默认是任何空格• unpack : 如果True,读入属性将分别写入不同变量
np.savetxt('a.csv',a,fmt='%d',delimiter=',')b = np.loadtxt('a.csv',dtype=np.int,delimiter=',')

可参考:python之numpy库[1]


( 2).多维数据的存取

#写a.tofile(frame, sep='', format='%s')• frame : 文件、字符串• sep : 数据分割字符串,如果是空串,写入文件为二进制• format : 写入数据的格式
#读np.fromfile(frame,dtype=float, count=‐1, sep='')• frame : 文件、字符串• dtype : 读取的数据类型• count : 读入元素个数,‐1表示读入整个文件• sep : 数据分割字符串,如果是空串,写入文件为二进制

Attention!!
该方法需要读取时知道存入文件时数组的维度和元素类型
即需要配合reshape来读取。

便捷存取就不需要考虑这种问题,存取过程如下:

np.save(fname, array) 或 np.savez(fname, array)• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz• array : 数组变量np.load(fname)• fname : 文件名,以.npy为扩展名,压缩扩展名为.npz

在上述存储过程中就把维度信息等数组信息存在了文件里:
这里写图片描述

5.numpy的随机数函数
6.numpy的统计函数
7.numpy的梯度函数

更多详细内容参见python之numpy库[2]


本文大纲和部分内容均摘自:Python数据分析与展示

原创粉丝点击