Python中数据处理之Numpy篇

Numpy简介

Python语言一开始并不是设计为科学计算使用的语言,随着越来越多的人发现Python的易用性,逐渐出现了关于Python的大量外部扩展,NumPy (Numeric Python)就是其中之一。NumPy提供了大量的数值编程工具,可以方便地处理向量、矩阵等运算,极大地便利了人们在科学计算方面的工作。

1
import numpy as np

创建数组

数组的创建可通过转换列表实现,高维数组可通过转换嵌套列表实现:

1
2
3
4
5
6
7
8
9
10
11
raw = [0,1,2,3,4]
a = np.array(raw)
#a==array([0, 1, 2, 3, 4])
raw = [[0,1,2,3,4], [5,6,7,8,9]]
b = np.array(raw)
# 生成全零矩阵
np.zeros((4,5),dtype=int) #默认为flout
# [0,1)区间随机数组
np.random.rand(5)
# 生成指定长度的一维数组
np.linspace(0, 2, 9) #array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])

数组基础

1
2
3
4
5
6
7
8
9
a = np.array([[1.0, 2], [2, 4]])
b = np.array([[3.2, 1.5], [2.5, 4]])
# +-*/ 以及'+='类型适用
a /= 2
# 一些函数
np.exp(a)
np.sqrt(a)
np.square(a)
np.power(a,3)

数组求值函数

1
2
3
a.sum() # 整体求和
a.max() # 整体最大值
a.max(axis=0) # 0表示按列求,1表示按行求。都是返回行数组。

矩阵(Matrix)

矩阵对象和数组的主要有两点差别

  1. 矩阵是二维的,而数组的可以是任意正整数维.
  2. 矩阵的’*’操作符进行的是矩阵乘法

矩阵创建

1
2
3
4
5
# 直接创建
A = np.matrix('1.0 2.0; 3.0 4.0')
# 由numpy.ndarray转换为矩阵
a = np.arange(20).reshape(4, 5)
A = np.asmatrix(a) # A = np.mat(a)

数组元素访问

下标访问

1
2
3
a = np.array([[3.2, 1.5], [2.5, 4]])
# a[0][1] == a[0,1]
# a[:,[1,3]] == a[:,1:3]

条件判断

1
a[:, 0] > 5 # array([False, False, True, True], dtype=bool)

where函数

1
2
3
loc = numpy.where(a==11)
print loc # (array([2]), array([1]))
print a[loc[0][0], loc[1][0]] # 11

陷阱

  1. 等于号赋值是内存映射
  2. copy()实现数据拷贝
  3. 若对a重新赋值,即将a指到其他地址上,b仍在原来的地址上

数组操作

矩阵转置

1
2
3
4
a = np.random.rand(2,4)
b = np.transpose(a)
A = np.mat(a)
A=A.T #"A is a matrix, by using A.T:"

矩阵求逆

1
2
3
4
import numpy.linalg as nlg
a = np.random.rand(2,2)
a = np.mat(a)
ia = nlg.inv(a)

特征值和特征向量

1
2
3
import numpy.linalg as nlg
a = np.random.rand(3,3)
eig_value, eig_vector = nlg.eig(a)

向量拼接

水平拼接column_stack() & hstack()
垂直拼接row_stack() & vstack()

1
2
3
4
5
6
a = np.array((1,2,3))
b = np.array((2,3,4))
A = np.column_stack((a,b))
B = np.row_stack((a,b))
A = np.hstack([a,b])
B = np.vstack([a,b])