欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-07 21:45:45
...

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属性

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


(3)ndarray的元素类型

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

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


(4)numpy数组创建方法

两类创建方法:

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

    python数据分析复盘——数据分析相关库之Numpy
>>> 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)

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

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

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


(5)ndarray数组的维度变换

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

>>> 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]])
>>> a
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]]])
>>> a.resize((3,8))
>>> a
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]])

(6)ndarray数组的类型变换

new_a = a.astype(new_type)

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

ls = a.tolist()

(8)ndarray索引和切片

  • 索引:获取数组中特定位置元素的过程
  • 切片:获取数组元素子集的过程
  • 一维数组的索引和切片:与Python的列表类似
  • 多维数组的切片也类似
    python数据分析复盘——数据分析相关库之Numpy

(9)ndarray数组与标量

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


(10)ndarray一元函数

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

>>> 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)
>>> a
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,  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二元函数

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

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


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

在上述存储过程中就把维度信息等数组信息存在了文件里:
python数据分析复盘——数据分析相关库之Numpy

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

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


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