numpy常用

1. 目的

熟悉numpy进行数据处理

2. 常用函数

2.1 numpy.choose

  • 查看帮助
    numpy.choose目的是,从现有数组中,根据给定的下标, 生成新的数据
def choose(a, choices, out=None, mode='raise')
a : 表示下标
choice : 函数根据a的下标从choice中选择数据
  • 实例理解
import numpy as np
y = np.array([0,1,3,2,4,5,6,7])
# y = np.random.randint(0,10,10)
# 数组[1, 2, 3]为被选择数据
np.choose(y, [1, 2,3],mode='wrap')

# 输出:
In [33]: np.choose(y, [1, 2,3],mode='wrap')
Out[33]: array([1, 2, 1, 3, 2, 3, 1, 2])

In [35]: np.choose(y, [1, 2,3], mode='clip')
Out[35]: array([1, 2, 3, 3, 3, 3, 3, 3])

# 如果去掉mode参数,会报错, 因为y数组代表的下标,已经超过被选择的数组长度3
In [35]: np.choose(y, [1, 2,3])
ValueError: invalid entry in choice array

2.2 numpy.ndindex

  • 查看帮助
    输出数组的下标
  • 实例理解
in [38]: y2 = np.array([0, 1, 3, 2, 4, 5, 6, 7])
Out[38]: array([0, 1, 3, 2, 4, 5, 6, 7])

In [39]: for i in np.ndindex(y.shape):print i
(0,)
(1,)
(2,)
(3,)
(4,)
(5,)
(6,)
(7,)

In [42]: y3 = np.random.randint(0,9,9).reshape(3,3)

In [43]: y3
Out[43]: 
array([[2, 5, 6],
       [2, 1, 7],
       [2, 3, 6]])

In [44]: for i in np.ndindex(y3.shape):print i
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)


2.3 reshape

  • 数据维度变化
  • 实例
>>> arr = np.arange(0, 8, 1)
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr.reshape((2, 4))
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

# 同样:已知数组元素格式, 可以仅指定列维度数,行为度缺省为-1, 同样可以转化成功
>>> arr.reshape((-1, 4))  
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

# 同样, 已知数组元素格式, 可以仅指定行维度数,列为度缺省为-1, 同样可以转化成功
>>> arr.reshape((2, -1))  
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

# 备注: -1表示函数会根据另外一个维度值和元素数,自动计算并匹配该维度

2.4 numpy.squeeze

  • 把numpy.narray中维度等于1的去掉
  • 实例
# x.shape = (1, 3, 1)
# x.squeeze().shape() = (3,)  
# 即: 去掉shape中的两个1, 具体实例如下:
>>> x = np.array([[[0], [1], [2]]])
>>> x
array([[[0],
        [1],
        [2]]])
>>> x.shape
(1, 3, 1)

# 下面执行squeeze函数
>>> x.squeeze()
array([0, 1, 2])
>>> x.squeeze().shape
(3,)


# 实例2 
>>> x1 = [[1,2,3,4],[2,3,4,5]]
>>> x2 = numpy.array([x1])
>>> x2.shape
(1, 2, 4)

# 执行squeeze函数,观察shape变化
>>> x3 = x2.squeeze()
>>> x3.shape
(2, 4)

2.5 np.random.seed(0)

  • 使得random函数产生的随机数不变
  • 实例
# 注意: 必须每次调用np.random之前注册随机种子,以确保每次产生随机值相同
In [15]: np.random.seed(0); print np.random.rand(4);
[ 0.5488135   0.71518937  0.60276338  0.54488318]

In [16]: np.random.seed(0); print np.random.rand(4);
[ 0.5488135   0.71518937  0.60276338  0.54488318]

2.5 np.linspace

  • 创建线性等差数组
  • 实例
>>> np.linspace(0,10,5)
array([  0. ,   2.5,   5. ,   7.5,  10. ])
# 绘图,更直观
>>> import matplotlib.pyplot as plt
>>> plt.plot(np.linspace(0,10,5))
>>> plt.show()
linspace函数产生直线

2.6 np.searchsorted(arr, data)

  • 按照数组arr内元素顺序,将data划分类N类,N=len(arr)
  • 实例
# 划分标准数组
>>> arr = np.arange(0, 5, 1)
array([0, 1, 2, 3, 4])
# arr = np.linspace(0, 10, 5)

# 被划分数组
>>> data = np.array([1.1, 3.5, 4.9, 5.1, 0])
>>> np.searchsorted(arr, data)
array([2, 4, 5, 5, 0])
# 2代表: 1-2区间; 4代表: 3-4区间
# 即: data 数据的值,被映射到数组arr创建的区间内

2.7 np.ravel(order='C')

  • 将多维数组打平,变成一维数组
  • order = 'C' 顺序从左到右,从上到下进行flatten
  • order = 'F','A','K'自己修改看变化
  • 实例
>>> arr = np.arange(0,27,1).reshape((3,3,3))
>>> arr
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
>>> arr.ravel()
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26])

2.8 array[::]用法

  • 了解numpy.array的切片
  • 实例
import numpy as np
arr = np.arange(0, 10, 1)
Out[48]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
def f(begin, step):
    arr[begin::step]
# begin是数组起始的下标位置, 缺省默认为从0开始
# step为移动的步伐,如为正数,表示起始位置从左到右,负数则起始位置从右到左,缺省值为1
# 举例:
In [49]: arr[3::1]
Out[49]: array([3, 4, 5, 6, 7, 8, 9])
In [50]: arr[3::2]
Out[50]: array([3, 5, 7, 9])
In [51]: arr[3::-1]
Out[51]: array([3, 2, 1, 0])
In [52]: arr[3::-2]
Out[52]: array([3, 1])

2.9 np.c_ 与 np.r_

  • 实例
In [57]: s1
Out[57]: array([1, 2, 3, 4])
In [58]: s2
Out[58]: array([1, 2, 3, 4])
In [62]: np.c_[s1, s2]
Out[62]: 
array([[1, 1],
       [2, 2],
       [3, 3],
       [4, 4]])
In [63]: np.r_[s1, s2]
Out[63]: array([1, 2, 3, 4, 1, 2, 3, 4])
In [64]: s3
Out[64]: [1, 2, 3, 4, 1, 2, 3, 4]
In [65]: np.r_[s1, s2, s3]
Out[65]: array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])

2.10 np.meshgrid

  • 实例
    >>> nx, ny = (3, 2)
    >>> x = np.linspace(0, 1, nx)
    >>> y = np.linspace(0, 1, ny)
    >>> xv, yv = np.meshgrid(x, y)
    >>> xv
    array([[ 0. ,  0.5,  1. ],
           [ 0. ,  0.5,  1. ]])
    >>> yv
    array([[ 0.,  0.,  0.],
           [ 1.,  1.,  1.]])
    >>> xv, yv = np.meshgrid(x, y, sparse=True)  # make sparse output arrays
    >>> xv
    array([[ 0. ,  0.5,  1. ]])
    >>> yv
    array([[ 0.],
           [ 1.]])

2.11 hstack与vstack

  • hstack即:两侧,每个子元素水平元素相加
  • vstack即:两侧,每个子元素垂直元素相加
  • 实例:
# 顺便说下newaxis功能, 即:将子元素增加一维度
# (2,) => (2,1)  (2,3)=>(2,1,3)
from numpy import newaxis
In [44]: a1 = np.array([1,2])

In [45]: b1 = np.array([10,20])

In [46]: a1[:,newaxis]
Out[46]: 
array([[1],
       [2]])
In [48]: np.vstack((a1[:,newaxis], b1[:, newaxis]))
Out[48]: 
array([[ 1],
       [ 2],
       [10],
       [20]])
In [58]: np.hstack((a1[:,newaxis], b1[:, newaxis]))
Out[58]: 
array([[ 1, 10],
       [ 2, 20]])

你可能感兴趣的:(numpy常用)