利用python进行数据分析-02-numpy基础

Ndarray:多维数组对象

ndarray是一个通用的同构数据多维容器,每个数组均有一个shape(表示维度大小)和dtype(说明数组数据类型的对象):

eg:>>>data.shape

(2,3)

>>>data.dtype

dtype('float64')

1、创建ndarray

data1创建arr1的ndarray数组

data1 = [1.2,23,3,23,4,6]
arr1 = np.array(data1)

zeros(10,10) 和 ones(10,10)  可以分别创建制定长度、维度的数组,empty可以创建空的数组
numpy关注是数值计算,因此,若没有一般制定,数据类型基本都是float64.

np.arange(15)    #返回一个ndarray而不是列表


ndarray的数据类型dtype是一个特殊的对象,它含有ndarray将一块内存解释为特定数据类型所需的信息:

arr1 = np.array([1,2,3],dtype=np.float64)

ndarray可通过astype的方法来显式转换其dtype:

float_arr = arr.astype(np.float64)

大小相等的数组之间可以将运算运算到元素级。不同大小的数组之间运算叫做 广播。

2.基本的索引和切片

啊啊啊啊啊啊,坑爹的浏览器,我的笔记全丢了,以后再补吧!

3、布尔型索引

>>> import numpy as np
>>> names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
>>> data = np.random.randn(7,4)
>>> names == 'Bob' #产生布尔型数组
array([ True, False, False,  True, False, False, False], dtype=bool)
>>> data[names == 'Bob']
array([[ 0.91085438, -0.83674359,  1.2117743 , -0.40052236],
       [ 0.2068526 , -0.41068779,  0.83953301, -0.93918484]])

同时可联合切片也可以:

>>> data[names == 'Bob',:2]
array([[ 0.91085438, -0.83674359],
       [ 0.2068526 , -0.41068779]])
>>> data[data<0] = 0    #将小于0的值进行赋值
>>> data
array([[ 0.91085438,  0.        ,  1.2117743 ,  0.        ],
       [ 0.        ,  1.08886269,  1.82398061,  2.28503012],
       [ 0.        ,  1.33202507,  0.        ,  0.        ],
       [ 0.2068526 ,  0.        ,  0.83953301,  0.        ],
       [ 0.        ,  0.13073222,  0.33671297,  0.        ],
       [ 0.        ,  0.62412247,  0.        ,  0.        ],
       [ 0.68182239,  0.        ,  0.        ,  0.        ]])


 

4、花式索引

指利用整数数组进行索引,假设现有一个8*4数组:

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]])

 

 得到上面的结果也可使用此代码

>>> arr[np.ix_([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]])


 

5、数组转置和轴对换

T属性:

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]])

利用np.dot计算矩阵内积:

>>> arr = np.random.randn(6,3)
>>> np.dot(arr.T,arr)
array([[ 3.67517253, -0.57586473, -3.36499059],
       [-0.57586473,  9.52179993, -0.74028303],
       [-3.36499059, -0.74028303,  3.42469162]])

高维数组需要得到一个由轴编号组成的元祖才能进行转置:

arr = np.arange(16).reshape((2,2,4))
>>> arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
>>> arr.transpose((1,0,2))
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])

swapaxes方法:

>>> arr.swapaxes(1,2)
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

 swapaxes 也是返回源数据的视图

posted @ 2015-10-20 00:11  Groupe  阅读(215)  评论(0编辑  收藏  举报