zoukankan      html  css  js  c++  java
  • Python 机器学习库 NumPy 教程

    0 Numpy简单介绍

    Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。

    NumPy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素。调用mat()函数可以将数组转化为矩阵,输入命令如下:

    np.mat(np.random.rand(1,4))

    1 安装

    pip install numpy

    在NumPy中,维度称之为axis(复数是axes),维度的数量称之为rank

    (通用做法import numpu as np 简单输入)

    2 多维数组

    NumPy的数组类是ndarray,它有一个别名是 numpy.array,但这与Python标准库的array.array并不一样。后者仅仅是一个一维数组。而ndarray具有以下的属性:

    • ndarray.ndim:数组的维数。在Python世界中,维数称之为rank
    • ndarray.shape:数组的维度。这是一系列数字,长度由数组的维度(ndim)决定。例如:长度为n的一维数组的shape是n。一个n行m列的矩阵的shape是n,m
    • ndarray.size:数组中所有元素的数量
    • ndarray.dtype:数组中元素的类型,例如numpy.int32numpy.int16或者numpy.float64
    • ndarray.itemsize:数组中每个元素的大小,单位为字节
    • ndarray.data:存储数组元素的缓冲。通常我们只需要通过下标来访问元素,而不需要访问缓冲

    以list或tuple变量为参数产生一维数组:

    np.array([1,2,3,4]) 
    
    np.array((1.2,2,3,4))  

    以list或tuple变量为元素产生二维数组或者多维数组:

    np.array(((1,2,3),(4,5,6)))  
    
    np.array([[1,2,3],[4,5,6]])  

    我们也可以在创建数组的时候,指定元素的类型,例如这样:

    np.array([[1,2],[3,4]], dtype=complex )

    可以使用astype转换类型,在处理文件时候这个会很实用,注意astype 调用会返回一个新的数组,也就是原始数据的一份拷贝。

    numeric_strings2 = np.array(['1.23','2.34','3.45'],dtype=np.string_)
    print(numeric_strings2)
    [b'1.23' b'2.34' b'3.45']
    
    t=numeric_strings2.astype(float)
    print(t)
    [ 1.23  2.34  3.45]

    3 numpy索引(index)与切片(slicing)

    • index 和slicing :第一数值类似数组横坐标,第二个为纵坐标;
    x=np.array(((1,2,3,4),(5,6,7,8),(9,10,11,12)))
    y=x[:,1]
    y[0]=20
    print(y)
    print(x)

    结果:

    通过上面可以发现改变y会改变x ,因而我们可以推断,y和x指向是同一块内存空间值,系统没有为y 新开辟空间把x值赋值过去。

    arr = np.arange(10)
    arr[3:6]=10
    print(arr)

    结果:

    思考为什么这么设计? Numpy 设计是为了处理大数据,如果切片采用数据复制话会产生极大的性能和内存消耗问题。

    •  假如说需要对数组是一份副本而不是视图可以如下操作:
    arr = np.arange(10) 
    arr_copy = arr[3:6].copy() 
    print(arr_copy)
    arr_copy[:]=24 
    print(arr_copy)
    print(arr)

    结果:

    • 再看下对list 切片修改(这里设计到python 中深浅拷贝,其中切片属于浅拷贝):
    l=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
    l[5:8] = 12 #报错 TypeError: can only assign an iterable
    print(l)
    l1= l[5:8]
    print(l1)
    l1[0]=12 
    print(l1)
    print(l)

    结果:

    4 多维数组索引(index)、切片(slicing)

    arr2d = np.arange(1,10).reshape(3,3)
    print(arr2d)
    print(arr2d[2])
    print(arr2d[0][2])
    print(arr2d[0,2])

    结果:

    5 基本的矩阵运算

    转置:

    a = np.array([[1,0],[2,3]])
    print(a)
    print()
    print(a.transpose())

    结果:

    特征值、特征向量:

    6 Shape与操作

    除了生成数组之外,当我们已经持有某个数据之后,我们可能会需要根据已有数组来产生一些新的数据结构,这时候我们可以使用下面这些函数:

    • reshape:根据已有数组和指定的shape,生成一个新的数组
    • vstack:用来将多个数组在垂直(v代表vertical)方向拼接(数组的维度必须匹配)
    • hstack:用来将多个数组在水平(h代表horizontal)方向拼接(数组的维度必须匹配)
    • hsplit:用来将数组在水平方向拆分
    • vsplit:用来将数组在垂直方向拆分

    7 特定array的创建

    在实际上的项目工程中,我们常常会需要一些特定的数据,NumPy中提供了这么一些辅助函数:

    • zeros:用来创建元素全部是0的数组
    • ones:用来创建元素全部是1的数组
    • empty:用来创建未初始化的数据,因此是内容是不确定的
    • arange:通过指定范围和步长来创建数组
    • linespace:通过指定范围和元素数量来创建数组
    • random:用来生成随机数

    参考:

    numpy 基础入门 - 30分钟学会numpy 

    Python 机器学习库 NumPy 教程

  • 相关阅读:
    《WPF程序设计指南》读书笔记——第6章 Dock与Grid
    《WPF程序设计指南》读书笔记——第3章 内容的概念
    《WPF程序设计指南》读书笔记——第9章 路由输入事件
    《WPF程序设计指南》读书笔记——第8章 依赖属性
    《WPF程序设计指南》读书笔记——第5章 Stack与Wrap
    《WPF程序设计指南》读书笔记——第1章 应用程序与窗口
    《WPF程序设计指南》读书笔记——第7章 Canvas
    《WPF程序设计指南》读书笔记——第4章 按钮与其他控件
    《WPF程序设计指南》读书笔记——第2章 基本画刷
    电信要再这麽任意搞垄断,任意妄为,等中国的网民都成了网络暴民看他怎么收场!! Carlwave
  • 原文地址:https://www.cnblogs.com/hoaprox/p/10968053.html
Copyright © 2011-2022 走看看