numpy基本入门操作汇总一

本文是学习《利用python进行数据分析》的部分笔记,在这里感谢作者。

Numpy是高性能科学计算和数据分析的基础包,在这里只罗列一些numpy的常用功能。

一:导入Numpy:

 

import numpy as np

它是一个N维的数组对象,也就是说,其中的元素必须是同类型的。

 

二:创建ndarray

使用array函数,参数是一切序列化的对象,比如:

 

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

shape函数可以返回各维度大小

 

 

>>> arr2.shape
(2, 4)

dtype函数可以返回数组中数据类型

 

 

>>> arr2.dtype
dtype('int32')

zeros和ones分别可以创建指定形状的全0或者全1数组,empty可以创建一个没有任何具体值的数组,传入一个元组表示多维数组范围

 

 

>>> np.zeros((3,2))
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])>> >

np.ones((4,4))
array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]])>> >

np.empty((2,3))
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])>> >

ones_like以另一个数组为参数,创建同样大小的全1数组:类似还有zeros_like,empty_like

 

 

np.ones_like(arr2)
array([[1, 1, 1, 1],
       [1, 1, 1, 1]])>

eye函数创建单位矩阵

 

arange函数类似python内置的range函数:

 

>>> np.arange(15)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])


三:ndarray的数据类型

 

可以显示指定数组数据类型

 

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

可以通过ndarray的astype方法显示地转换其dtype

 

 

>>> arr=arr1.astype(np.float32)
>>> arr
array([ 1.,  2.,  3.], dtype=float32)

如果某字符串数组全是数字,也可以用astype将其转化为数值形式

 

 

>>> num_strings=np.array(['1.25','-9.6','42'],dtype=np.string_)
>>> num_strings.astype(float)
array([  1.25,  -9.6 ,  42.  ])

四:数组和标量之间的运算

 

arr*arr,arr-arr,1/arr,arr**0.5都是可以运算的。

五:基本的索引和切片

一维数组的操作和Python列表的功能差不多:

 

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

跟列表最重要的区别是,数组切片是原始数组的视图,这意味着数据不会被复制,试图上的所有修改都会直接反映到原数组上。

 

如果要得到副本,可以用copy函数

 

>>> arr1=arr[5:8].copy()
>>> arr1
array([12, 12, 12])

切片索引也跟Python列表的一维对象差不多。

 

可以利用整形数组进行索引:

 

>>> 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,1,0]]
array([[ 4.,  4.,  4.,  4.],
       [ 3.,  3.,  3.,  3.],
       [ 1.,  1.,  1.,  1.],
       [ 0.,  0.,  0.,  0.]])>> >

注意,这种方式跟切片不一样,会把数据复制到新数组之中。

 

六:数组的转置

转置方法.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]])

计算矩阵内积XTX:

>>> arr=np.random.randn(6,3)
>>> np.dot(arr.T,arr)
array([[ 11.22401502,   4.2548458 ,  -2.84368601],
       [  4.2548458 ,   9.0673642 ,  -4.23048071],
       [ -2.84368601,  -4.23048071,   3.89732813]])

七:通用函数:对数组中每一个元素执行运算。

 

np.abs            求绝对值

np.sqrt           求各元素平方根

np.square     求各元素平方

np.exp            求各元素指数

log ,log10,log2     求对数

ceil                 变成大于该值的最小整数

floor               变成小于该值的最大整数

isnan            返回一个表示哪些值是“NAN”的布尔型数组

add                两个数组对应相加(subtract,multiply,divide)

八:利用数组进行数据处理:

np.where函数是三元表达式x if condition else y的矢量化版本

 

>>> 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 = np.where(cond,xarr,yarr)
>>> result
array([ 1.1,  2.2,  1.3,  1.4,  2.5])

where在数据分析中经常使用,通常用于根据一个数组产生另一个数组

 

 

>>> arr = np.random.randn(4,4)
>>> arr
array([[-0.88678735,  0.41149481, -0.55946983,  0.44320273],
       [-0.85065922, -0.89529666, -0.52700649, -0.13264943],
       [-0.52438978, -1.10277602,  0.56030451,  1.43615325],
       [-1.30382499,  0.3459263 , -1.52122709,  0.40608226]])>> >

np.where(arr>0,2,arr)         #只将正值设置为2
array([[-0.88678735,  2.        , -0.55946983,  2.        ],
       [-0.85065922, -0.89529666, -0.52700649, -0.13264943],
       [-0.52438978, -1.10277602,  2.        ,  2.        ],
       [-1.30382499,  2.        , -1.52122709,  2.        ]])>

 

 

 

你可能感兴趣的:(数据挖掘,机器学习)