python数据分析(1)--numpy
2018-01-15 本文已影响130人
小吵闹123
简介
NumPy系统是Python的一种开源的数值计算扩展,可用来存储和处理大型矩阵。
numpy中的array
ndarray是numpy提供的一种数组,python的数组可以存放各种类型和对象,运行速度下降,而ndarray为了提高运行速度,底层用c实现,限定只能使用一种类型。ndarray有以下几个常用属性
属性 | 说明 |
---|---|
shape | 几行几列 |
ndim | 数组维度 |
dtype | 数组元素的类型 |
itemsize | 数组中每个元素的大小 |
size | 数组中元素的个数 |
下面分别打印以下这几个属性
list = [[1,2,3], [4,5,6], [7,8,9]]
# 新建一个元素类型为int64的数组
numpy_list = numpy.array(list, dtype=numpy.int64)
print(numpy_list.shape)
print(numpy_list.ndim)
print(numpy_list.dtype)
print(numpy_list.itemsize)
print(numpy_list.size)
结果如下
(3, 3)
2
int64
8
9
常用array
array | 说明 |
---|---|
numpy.zeros[row, col] | 全零数组 |
numpy.ones[row, col] | 全一数组 |
numpy.random.rand | 生成随机数 |
numpy.random.randInt(low, hight) | 生成指定范围内的随机整数 |
numpy.random.randn | 正态分布随机数 |
numpy.random.choice() | 从指定的数组中生成随机数 |
numpy.random.beta | beta分布 |
print(numpy.zeros([2, 3]))
print(numpy.ones([3, 5]))
print(numpy.random.rand())
print(numpy.random.randint(1,2))
print(numpy.random.randn())
print(numpy.random.beta(1, 1, 2))
[[ 0. 0. 0.]
[ 0. 0. 0.]]
[[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
0.6256807713479122
1
1.1866001408917326
[ 0.68579746 0.93474434]
常用操作
以下的list都是numpy的array
函数 | 说明 |
---|---|
numpy.arange(low, high) | 产生等差数列,范围[1,10) |
list.reshape([row, col]) | 将数组转换成指定行列的数组 |
numpy.exp(list) | 指数 |
numpy.sin(list) | 三角函数 |
numpy.log(list) | 对数 |
list.sum(axis) | 求和,axis指对数组深入的程度 |
list.max(axis) | 最大值 |
list.min(axis) | 最小值 |
list1+list2 | 数组元素相加 |
list1-list2 | |
list1*list2 | |
list1/list2 | |
numpy.dot() | 矩阵点乘 |
numpy.concatenate(list1, list2) | 追加数组 |
numpy.vstack(list1, list2) | |
numpy.hstack(list1, list2) | |
munpy.split(list, n) | 将数组切分成n份 |
numpy.copy(list) | 拷贝array |
测试程序
list = numpy.arange(1, 9)
print("等差数列")
print(list)
#-1为默认值
print("转换多维数组")
print(list.reshape(2,-1))
print("指数计算")
print(numpy.exp(list.reshape(2, -1)))
l = [[1,2,3], [4,5,6], [7,8,9]]
numpy_list = numpy.array(l)
print("求和计算")
# 深度为1的结果
print("axis=0")
print(numpy_list.sum(axis=0))
# 深度为2的结果
print("axis=1")
print(numpy_list.sum(axis=1))
print("数组相加")
list1 = numpy.array([[1,2,3], [4,5,6]])
list2 = numpy.array([[2,3,4], [3,4,5]])
print(list1 + list2)
输出结果
等差数列
[1 2 3 4 5 6 7 8]
转换多维数组
[[1 2 3 4]
[5 6 7 8]]
指数计算
[[ 2.71828183e+00 7.38905610e+00 2.00855369e+01 5.45981500e+01]
[ 1.48413159e+02 4.03428793e+02 1.09663316e+03 2.98095799e+03]]
求和计算
axis=0
[12 15 18]
axis=1
[ 6 15 24]
数组相加
[[ 3 5 7]
[ 7 9 11]]
矩阵操作和线性方程组
函数 | 说明 |
---|---|
numpy.eye() | 生成单位矩阵 |
inv(list) | 求逆矩阵 |
list.transpose() | 求转置矩阵 |
det(list) | 求矩阵的行列式 |
eig(list) | 求特征值和特征向量,返回值第一个元组为特征值,第二个元组是特征向量 |
solve(list, y) | 求解方程组 |
测试程序
#encoding-utf8
import numpy
from numpy.linalg import *
def main():
print("单位矩阵")
print(numpy.eye(3))
list = numpy.array([[3, 5], [7, 9]])
print("逆矩阵")
print(inv(list))
print("转置矩阵")
print(list.transpose())
print("矩阵行列式")
print(det(list))
print("特征值和特征向量")
print(eig(list))
print("求解二元方程: 3x+7y=2, 5x+9y=5")
y = numpy.array([[2], [5]])
print(solve(list, y))
pass
if __name__ == '__main__':
main()
输出结果
单位矩阵
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
逆矩阵
[[-1.125 0.625]
[ 0.875 -0.375]]
转置矩阵
[[3 7]
[5 9]]
矩阵行列式
-8.0
特征值和特征向量
(array([ -0.63324958, 12.63324958]), array([[-0.80897568, -0.46067886],
[ 0.58784211, -0.88756689]]))
求解二元方程
[[ 0.875]
[-0.125]]
其它
函数 | 说明 |
---|---|
numpy.fft.fft() | FTT计算 |
numpy.corrcoef() | 计算相关系数 |
numpy.poly1d() | 生成一元多次函数 |
测试程序
#encoding-utf8
import numpy
def main():
print("FFT")
print(numpy.fft.fft(numpy.ones([1,6])))
print("相关系数")
print(numpy.corrcoef([1,0,1], [0,1,0]))
print("生成一元多次函数")
print(numpy.poly1d([1,2,3]))
pass
if __name__ == '__main__':
main()
输出结果
FFT
[[ 6.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]]
相关系数
[[ 1. -1.]
[-1. 1.]]
生成一元多次函数
2
1 x + 2 x + 3
小结
以上就是numpy简单的使用,numpy主要用于对矩阵的操作和变换,对矩阵计算简化过程,可以提供很大的便利。