您的位置:首页 > 编程语言 > Python开发

python之numpy对矩阵的操作

2017-11-15 23:35 477 查看
python的numpy包有很多对矩阵的操作,下面是一些事例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# @Time    : 17/11/15 下午9:27
# @Author  : lijie
# @File    : mytest06.py

import numpy

a1=numpy.array([1,2,3,4])
a2=numpy.array((1,2,3,4))

a3=numpy.array([[1,2,3,4],[5,6,7,8]])

#第2行第3列
print "*"*50
print a3[1,2]
print "*"*50

#第2列所有 :表示所有的
print "*"*50
print a3[:,1]
print "*"*50

#第1行所有
print "*"*50
print a3[0,:]
print "*"*50

#从第0个开始取值赋予999 并且以后每次右移2位继续取值赋值为999
print "*"*50
atmp1=numpy.array([1,2,3,4])
atmp1[0:3:2]=999
print "atmp1[0:3:2]",atmp1
print "*"*50

#前面表示行往下到第二行间隔为1赋值为888,后面表示列到第四列间隔为2的列赋值为888,前面的0可以省略
print "*"*50
atmp2=numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
atmp2[0:2:1,0:4:2]=888
print "atmp2[0:2:1,0:4:2]",atmp2
print "*"*50

#反转一维矩阵
print "*"*50
print "a2[::-1]",a2[::-1]
print "*"*50

#反转多维矩阵第一个-1表示列反转,第二个表示行反转 可以只反转一个
print "*"*50
print "a3[::-1,::-1]",a3[::-1,::-1]
print "*"*50

#当改变tmp1中的数据 原矩阵也会改变
print "*"*50
tmp1=a3[:,1]
tmp1[0]=999
print "a3",a3
print "*"*50

#产生一行矩阵
print "*"*50
a4=numpy.arange(21)
print "a4",a4
print "*"*50

#产生多行矩阵 4行5列 其中reshape是会返回新的矩阵,resize是直接改变原始矩阵
print "*"*50
a5=numpy.arange(20).reshape(4,5)
print "a5",a5
print "*"*50

#在1到20中产生30个数矩阵
print "*"*50
a6=numpy.linspace(1,20,30)
print "a6",a6
print "*"*50

#随机2*3 矩阵     (0,1】
print "*"*50
a7=numpy.random.random((2,3))
print "a7",a7
print "*"*50

#0矩阵 构造4*5 0矩阵
print "*"*50
a8=numpy.zeros((4,5))
print "a8",a8
print "*"*50

#0矩阵 构造4*5 1矩阵
print "*"*50
a9=numpy.ones((4,5))
print "a9",a9
print "*"*50

#e矩阵 构造5*5 E矩阵(单位矩阵)
print "*"*50
a10=numpy.eye(5)
print "a10",a10
print "*"*50

############矩阵计算
print "*"*50
a11=numpy.array([20,30,40,50])
a12=numpy.array([10,20,30,40])
print "a11+a12",a11+a12
print "a11-a12",a11-a12
print "a11*a12",a11*a12
print "a11/a12",a11/a12
print "*"*50

#对矩阵内的所有值平方
print "*"*50
a13=numpy.arange(4).reshape(2,2)
print "a13**2",a13**2
print "*"*50

#对矩阵内的所有值乘2
print "*"*50
print "a13*2",a13*2
print "*"*50

#对矩阵内的值求sin
print "*"*50
print "numpy.sin(a13)",numpy.sin(a13)
print "*"*50

#判断返回boolean矩阵
print "*"*50
print "a13<2",a13<2
print "*"*50

#数组内部计算
print "*"*50
a14=numpy.array(((1,3),(4,5)))
print "*"*50

#相当于所有相加
print "*"*50
print "numpy.sum(a14)",numpy.sum(a14)
print "*"*50

#竖向相加
print "*"*50
print "numpy.sum(a14,axis=0)",numpy.sum(a14,axis=0)
print "*"*50

#横向相加
print "*"*50
print "numpy.sum(a14,axis=1)",numpy.sum(a14,axis=1)
print "*"*50

#计算每一列的和
print "*"*50
print "a14.sum(axis=0)",a14.sum(axis=0)
print "*"*50

#计算每一行的和
print "*"*50
print "a14.sum(axis=1)",a14.sum(axis=1)
print "*"*50

#计算每一列的最小值
print "*"*50
print "a14.min(axis=0)",a14.min(axis=0)
print "*"*50

#计算每一列的最小值
print "*"*50
print "a14.min(axis=1)",a14.min(axis=1)
print "*"*50

#计算每一列的最大值
print "*"*50
print "a14.max(axis=0)",a14.max(axis=0)
print "*"*50

#计算每一列的最大值
print "*"*50
print "a14.max(axis=1)",a14.max(axis=1)
print "*"*50

#列叠加
print "*"*50
print "a14.cumsum(axis=0)",a14.cumsum(axis=0)
print "*"*50

#行叠加
print "*"*50
print "a14.cumsum(axis=1)",a14.cumsum(axis=1)
print "*"*50

#矩阵所有最大值
print "*"*50
print "a14.max()",a14.max()
print "*"*50
#矩阵所有最小值
print "*"*50
print "a14.min()",a14.min()
print "*"*50
##矩阵的遍历
print "*"*50
atmp3=numpy.array([[1,2,3,4],[5,6,7,8],[5,6,7,8]])
for i in atmp3.flat:
print i
print "*"*50

#矩阵的合并
#纵向合并
a15=numpy.ones((2,2))
a16=numpy.eye(2)

print "*"*50
print "numpy.vstack((a15,a16))",numpy.vstack((a15,a16))
print "*"*50

#横向合并
print "*"*50
print "numpy.hstack((a15,a16))",numpy.hstack((a15,a16))
print "*"*50

#矩阵浅拷贝
print "*"*50
a17=numpy.eye(2)
a18=a17
a18[0,1]=999
print "浅拷贝",a17
print "*"*50

#矩阵深拷贝
print "*"*50
a19=numpy.eye(2)
a20=a19.copy()
a20[0,1]=999
print "深拷贝",a19
print "*"*50

#矩阵转置 行专列
print "*"*50
a21=numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print "转置a21",a21.transpose()
print "*"*50

#查看矩阵的行 列数量
print "*"*50
a22=numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print "行列数为:",a22.shape
print "行数为:",a22.shape[0]
print "列数为:",a22.shape[1]
print "*"*50

#矩阵tile
print "*"*50
a23=numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
#内部横向扩展
print "numpy.tile(a23,1)\n",numpy.tile(a23,(2))
#内部横向纵向扩展
print "numpy.tile(a23,(2,2))\n",numpy.tile(a23,(2,2))
print "*"*50

#矩阵排序获取下标 或者最大最小值(注意是下标)
print "*"*50
a23=numpy.array([1,2,3,4,10,9,8,7])
print "a23.argsort()",a23.argsort()
print "a23.argmax()",a23.argmax()
print "a23.argmin()",a23.argmin()
print "*"*50
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: