Numpy 基础

Numpy的ndarray:

  基本操作:

import numpy as np
>>data=np.array([[ 0.9526, -0.246 , -0.8856],
                    [ 0.5639, 0.2379, 0.9104]]) 
>>data*10
array([[ 9.5256, -2.4601, -8.8565],
        [ 5.6385, 2.3794, 9.104 ]])
>>data+data
 array([[ 1.9051, -0.492 , -1.7713],
 [ 1.1277, 0.4759, 1.8208]])
#返回各维度大小的元组
>>data.shape
(2,3)
#返回数组数据类型
>>data.dtype
dtype('float64')
#创建ndarray
>> data1=[6,7.5,8,0,1]
>> arr1=np.array(data1)
>>arr1
array([6.,7.5,8.,0.,1.])
#创建一个多维数组:
>>data2=[[1,2,3,4],[5,6,7,8]]
>>arr2=np.array(data2)
>>arr2
array([1,2,3,4],
    [5,6,7,8])
>>arr2.ndim
2
>>arr2.shape
(2,4)
#利用zeros和ones分别创建指定长度或形状的全0或全1数组,empty可以创建一个没有任何具体值的数组
>>np.zeros(10)
array([0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.])
>>np.zeros((3, 6))
array([[ 0., 0., 0., 0., 0., 0.],
    [ 0., 0., 0., 0., 0., 0.],
    [ 0., 0., 0., 0., 0., 0.]])
>>np.empty((2,3,2))
array([[[ 4.94065646e-324, 4.94065646e-324],
     [ 3.87491056e-297, 2.46845796e-130],
     [ 4.94065646e-324, 4.94065646e-324]],
    [[ 1.90723115e+083, 5.73293533e-053],
     [ -2.33568637e+124, -6.70608105e-012],
     [ 4.42786966e+160, 1.27100354e+025]]])
#arange是Python内置函数range的数组版:
>>np.arange(15)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])

  ndarray的数据类型

#dtype(数据类型)是一个对象,它含有ndarray将一块内存解释为待定数据类型所需的信息
import numpy as np
>>arr1=np.array([1,2,3],dtype=np.float64)
>>arr1.dtype
dtype('float64')
>>arr2=np.array([1,2,3],dtype=np.int32)
>>arr2.dtype
dtype('int32')
#通过ndarray的astype方法显式地转换其dtype:
>>arr=np.array([1,2,3,4,5])
>>arr.dtype
dtype('int64')
>>float_arr=arr.astype(np.float64)
>>float_arr.dtype
dtype('float64')
>>numeric_strings=np.array(['1.25','-9.6','42'],dtype=np.string_)
>>numeric_strings.astype(float)
array([1.25,-9.6,42.])

 数组和标量之间的运算:大小相等的数组之间的任何算术运算都会将运算应用到元素级,同样,数组与标量的算术运算也会将那个标量值传播到各个元素

 基本的索引和切片:数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何修改都会直接反映到源数据上。

          如果想要得到的是ndarray切片的一份副本而非视图,就需要显式地进行复制操作,例如arr[5:8].copy()

 布尔型索引:

import numpy as np
>>names=np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
>>data=np.random.randn(7,4)
>>data[names=='Bob']
array([[-0.048 , 0.5433, -0.2349, 1.2792],
    [ 2.1452, 0.8799, -0.0523, 0.0672]])
>>data[names=='Bob',2:]
array([[-0.2349, 1.2792],
     [-0.0523, 0.0672]])

花式索引:将数据复制到新数组中

import numpy as np
>>arr=np.empty((8,4))
>>for i in range(8):
    arr[i]=i
>>arr
array([[ 0., 0., 0., 0.],
    [ 1., 1., 1., 1.],
    [ 2., 2., 2., 2.],
    [ 3., 3., 3., 3.],
    [ 4., 4., 4., 4.],
    [ 5., 5., 5., 5.],
    [ 6., 6., 6., 6.],
    [ 7., 7., 7., 7.]])
>>arr[[4,3,0,6]]
array([[ 4., 4., 4., 4.],
     [ 3., 3., 3., 3.],
     [ 0., 0., 0., 0.],
     [ 6., 6., 6., 6.]])
>>arr=np.arange(32).reshape((8,4))
>>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, 27],
    [28, 29, 30, 31]])
>>arr[[1, 5, 7, 2], [0, 3, 1, 2]]
array([ 4, 23, 29, 10])
>>arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
array([[ 4, 7, 5, 6],
    [20, 23, 21, 22],
    [28, 31, 29, 30],
    [ 8, 11, 9, 10]])

数组转置和轴对换:

  

import numpy as np
>> arr=np.arange(15).reshape((3,5))
>>arr
array([[ 0, 1, 2, 3, 4],
    [ 5, 6, 7, 8, 9],
    [10, 11, 12, 13, 14]])
>>arr.T
 array([[ 0, 5, 10],
    [ 1, 6, 11],
    [ 2, 7, 12],
    [ 3, 8, 13],
    [ 4, 9, 14]])

通用函数: 快速的元素级数组函数,是一种对ndarray中的数据执行元素级运算的函数

  1. 一元ufunc表:

  2. 二元ufunc表:

将条件逻辑表述为数组运算:np.where()

import numpy as np
>>xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
>>yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
>>cond = np.array([True, False, True, True, False])
>>result = [(x if c else y) for x,y,c in zip(xarr,yarr,cond)

======
>>result = np.where(cond, xarr, yarr)

数学和统计方法:

用于布尔型数组的方法:

  1.在数据运算中布尔值会被强制转换为1(True)和0(False)

  2.sum():统计布尔型数组中的True的个数

  3. Any():用于测试数组中是否存在一个或多个True

  4.All()  :用于检查数组中所有值是否都是True.

排序:

  sort()方法:

import numpy as np
>>arr=np.random.randn(8)
>>arr
array([ 0.6903, 0.4678, 0.0968, -0.1349, 0.9879, 0.0185, -1.3147,
          -0.5425])
>>arr.sort()
array([-1.3147, -0.5425, -0.1349, 0.0185, 0.0968, 0.4678, 0.6903,
            0.9879])    

唯一化以及其他的集合逻辑:

 用于数组的文件输入输出:

  1.将数组以二进制格式保存到磁盘:

    np.save()/np.savez() 和np.load()

  2.存取文本文件:

    np.loadtxt()

 

线性代数:

  

随机数生成:

 

posted @ 2017-02-24 10:36  easy_wang  阅读(209)  评论(0编辑  收藏  举报