Python Numpy基本用法

嘉美伯爵

数据处理 Numpy 309

基础内容

  • 维度理解(np.ndim)

关于维度的理解,一维只有长,二维有长和宽,三维有长宽高,在下面取值的形式我们可以看出维度的意义

# 一维
one = [3, 4, 5]
one[1]
# 二维
two = [
    [1, 2, 3],
    [4, 5, 5]
]
two[0][1]
# 三维
three = [
    [
        [1,2,3],
        [4,5,6]
    ],
    [
       [7,8,9],
       [10,11,12]
    ]
]
three[1][0][1]
  • size:总数量 itemsize 4表示int 8表示float shape:每层数组的长度

  • axis

axis:0 index方向 按列 axis: 1 head 按行

  • np.nan

更多参考python的nan,NaN,NAN

# 判断nan
In [3]: np.isnan(np.nan)
Out[3]: True
# 不可这样判断
In [4]: np.nan == np.nan
Out[4]: False
# nan类型
In [5]: type(np.nan)
Out[5]: float

常用技巧

  • pandas和numpy都具备这样过滤提取,和filter的原理有点类似

  • 精度
from numpy import pi
np.linspace(0,pi,3)
--------------
array([0.        , 1.57079633, 3.14159265])
  • 同步shape
# 返回一个用1填充的跟输入 形状和类型 一致的数组
>>> y = np.arange(3, dtype=np.float)
>>> y
array([ 0.,  1.,  2.])
>>> np.ones_like(y)
array([ 1.,  1.,  1.])

数组创建

  • 普通
# 创建完数组均可以reshape
np.array([1,2,3, 4]).reshape(2,2)
# np.arange(6)
--------
array([[1, 2],
       [3, 4]]
  • one/zero

传入 shape和dtype

 >>> np.ones((5,), dtype=int)
    array([1, 1, 1, 1, 1])

>>> np.ones((2, 1))
    array([[1.],
           [1.]])
  • arange
# 类似python arange  satrt stop stepthon arange  satrt stop step
>>> np.arange(3,7,2)
    array([3, 5])
  • np.random.randint

需要传入 范围和size

>>> np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1], # random
[3, 2, 2, 0]])
  • random.random

[0.0, 1.0)

np.random.random((2,3))
array([[0.92844209, 0.48395894, 0.10201279],
       [0.71387376, 0.84212299, 0.01838295]])
  • np.random.randn

正态分布

运算

  • 逻辑运算

> == <产生 False True 对,可以很好的对数据进行过滤

  • 矩阵相乘

注意 矩阵点乘(加减乘除) 要求 mn和mn 矩阵相乘 是 mn 和 nm

# e为底,2次幂
np.exp(2)

  • cumsum
# 递进相加
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> b.cumsum(axis=1)
---------------
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])       
  • 开平方
np.sqrt(9) # 3

np.add 和 + 效果一致

  • any/all

any和python一致,any元素全真返回True,all有一个是真的就是真

  • argsort

返回排好的index下标

  • ceil

向下取整

  • floor

向上取整

  • around

四舍五入

  • clip

在范围内,小于的取最小值,大于的取最大值,其余的不变

  • sort

axis 为None 平铺 1 行 0列 默认1

Numpy index

np的index具有强大的功能,我们在进行机器学习处理数据的时候常常会用到,在实际进行取值的时候,并不一定按顺序取,所以这个操作很重要

  • 实际应用
results = []
for key, value in dct.items():
     tmp = {}
     tmp['fault_type'] = key
     tmp['duration'] = list(np.array(duration, dtype='float')[value])
     tmp['user_call'] = np.sum(np.array(user_call)[value])
     tmp['starttime'] = list(np.array(starttime)[value])
     results.append(tmp)

配合json.dumps

由于每台机器的操作系统位数不一样,有的机器num的int类型可能是32位,但是Python并不支持32的数字类型,我们需要对其指定dtype

# TypeError: Object of type 'int32' is not JSON serializable
tmp['duration'] = list(np.array(duration, dtype='float')[value])

应用

  • np.sum

进行相加减,True为1 False为0

参考文档