zoukankan      html  css  js  c++  java
  • numpy用法介绍-未完待续

    简介

    • NumPy(Numerical Python简称) 是高性能科学计算和数据分析的基础包

    为什么使用?

    • 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。
    • 此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。
    • NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

    依赖库

         本文用以下方式导入NumPy函数库

    • from numpy.random import randn
      import numpy as np

    ndarray对象

    • 创建
      • 使用python序列+array函数创建数组
      • >>> arr1 = np.array([6, 7.5, 8, 0, 1])
        >>> arr2 = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
        >>> arr1
        array([ 6. ,  7.5,  8. ,  0. ,  1. ])
        >>> arr2
        array([[ 1,  2,  3,  4],
               [ 4,  5,  6,  7],
               [ 7,  8,  9, 10]])
      • 通过numpy高效的数组创建函数
        • arange函数:类似于python的range函数,通过指定开始值、终值和步长来创建一维数组,注意数组不包括终值
        • >>> np.arange(0,5,0.5) 
          array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])
        • zeros函数
        • >>> np.zeros(10)
          array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
    • 维度
      • 维度的获取可以使用shape
      • >>> arr1.shape
        (5,)
        >>> arr2.shape
        (3, 4)
      • 数组的维度可以通过设置shape属性
        • 当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度,改变shape的值只是改变每个轴的大小,数组元素在内存中的位置并没有改变
        • >>> arr2.shape = 4,3
          >>> arr2
          array([[ 1,  2,  3],
                 [ 4,  4,  5],
                 [ 6,  7,  7],
                 [ 8,  9, 10]])
          >>> arr2.shape = 2,-1
          >>> arr2
          array([[ 1,  2,  3,  4,  4,  5],
                 [ 6,  7,  7,  8,  9, 10]])
        • 使用数组的reshape方法,可以创建一个改变了尺寸的新数组
        • >>> arr2.reshape(3,4)
          array([[ 1,  2,  3,  4],
                 [ 4,  5,  6,  7],
                 [ 7,  8,  9, 10]])
    • 类型
      • 使用dtype可以获取数组的类型,使用astype可以改变数组的类型
      • >>> arr1 = np.array([1, 2, 3], dtype=np.float64)
        >>> arr2 = np.array([1, 2, 3], dtype=np.int32)
        >>> arr1.dtype
        dtype('float64')
        >>> arr2.dtype
        dtype('int32')
        >>> float_arr = arr2.astype(np.float64)
        >>> float_arr
        array([ 1.,  2.,  3.])
        >>> float_arr.dtype
        dtype('float64')
    • 数组和标量的运算
    • >>> arr = np.array([[1., 2., 3.], [4., 5., 6.]])
      >>> arr
      array([[ 1.,  2.,  3.],
             [ 4.,  5.,  6.]])
      >>> arr * arr
      array([[  1.,   4.,   9.],
             [ 16.,  25.,  36.]])
      >>> arr - arr
      array([[ 0.,  0.,  0.],
             [ 0.,  0.,  0.]])
      >>> 1 / arr
      array([[ 1.        ,  0.5       ,  0.33333333],
             [ 0.25      ,  0.2       ,  0.16666667]])
      >>> arr ** 0.5
      array([[ 1.        ,  1.41421356,  1.73205081],
             [ 2.        ,  2.23606798,  2.44948974]])
  • 相关阅读:
    POJ 1041(欧拉路)
    POJ 1904(强连通分量)Tarjan
    POJ 1486(二分图匹配)二分图的完全匹配的必须边
    POJ 1780(欧拉路)
    POJ 1386(欧拉路)
    HDU 3496(DP)
    PKU2387Til the Cows Come Home(SPFA+邻接表)
    HDU1863畅通工程(prim)
    ACM国内外OJ网站大集合
    HDU1175连连看(BFS)
  • 原文地址:https://www.cnblogs.com/duanxingxing/p/5305738.html
Copyright © 2011-2022 走看看