python常见的数据类型有列表list、字典dict、元组tuple、数组array等。在数据分析中,常用的计算类型是数组array形式(或着说矩阵matrix形式,两者有一定的区别)。
numpy库是python中高性能科学计算和数据分析的基础包。可以通过pip进行安装:
pip install numpy
# 或者通过清华镜像进行安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
然后导入numpy库
import numpy as np
创建数组
numpy进行创建数组很简单,它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。
例如,将一个含有1,2,3,4,元素的列表,转换为一个2×2的二维数组。
data_list = [1,2,3,4]
arr_1 = np.array(data_list).reshape(2,2)
输入arr_1和type(arr_1)、arr_1.shape查看arr_1的结果,类型和维度
arr_1
'''array([[1, 2],
[3, 4]])'''
type(arr_1)
'''numpy.ndarray'''
arr_1.shape
'''(2, 2)'''
reshape方法确定list转化的数组维度,如果不指定维度,将产生一维的数组:
arr_2 = np.array(data_list)
查看arr_2及其类型和维度
arr_2
'''array([1, 2, 3, 4])'''
type(arr_2)
'''numpy.ndarray'''
arr_2.shape
'''(4,)'''
数组计算
现实中的一些数据可能是几千×几千
或者万级单位的数组,具有很大的数据量。对数组进行运算,具有高效快速的好处。
数组索引取出部分值
例如:取出arr_1的第一行所有元素
arr_1[0]
# 得到的结果是
array([1, 2])
取出第一行第一列的元素
arr_1[0][0]
# 得到的结果是
1
取出arr_2的第1至第3个元素(切片)
arr_2[0:3]
# 得到的结果是
array([1, 2, 3])
数组(矢量)与标量计算
例如:arr_1乘上一个常数,如arr_1×2:
arr_1*2
# 得到的结果是arr_1中的每个元素都乘以2:
array([[2, 4],
[6, 8]])
数组平方和开平方
# 平方
np.sqaure(arr_1)
# 得到的结果是
array([[ 1, 4],
[ 9, 16]], dtype=int32)
# 开平方
np.sqrt(arr_1)
# 得到的结果是
array([[1. , 1.41421356],
[1.73205081, 2. ]])
数组间的运算
数组基本运算有加、减、乘、除、内积等。
# 数组相加
arr_3 = np.array([1,1,1,1]).reshape(2,2)
arr_1+arr_3
# 得到结果为对应位置元素相加,减法同加法,对应位置相减
array([[2, 3],
[4, 5]])
# 数组相乘
arr_1*arr_3
# 得到结果为对应位置相乘,除法同
array([[1, 2],
[3, 4]])
# 数组内积
np.dot(arr_1,arr_3)
# 2×2的数组与2×2的数组内积,结果仍是2×2的数组
array([[3, 3],
[7, 7]])
# 不同维度的数组相加
arr_4 = np.array([1,2])
arr_1+arr_4
# 2×2的数组与1×2的数组相加,每一行与改一维数组进行相同位置的元素相加(减法同),结果如下
array([[2, 4],
[4, 6]])
arr_1*arr_4
# 2×2的数组与1×2的数组相乘,每一行与改一维数组进行相同位置的元素相乘(除法同),结果如下
array([[1, 4],
[3, 8]])
另外还有其他一些函数,如转置、求逆,取对角线元素,求绝对值,最大、小值,求元素和等。
numpy的数值数组运算基本和矩阵的运算法则一样。
线性代数中常用的一些方法
参考:
《利用python进行数据分析》Wes McKinney著,唐学韬译,机械工业出版社,2013.9. ISBN: 978-111-43673-7