python+numpy实现的基本矩阵操作示例

本文实例讲述了python+numpy实现的基本矩阵操作。分享给大家供大家参考,具体如下:

#! usr/bin/env python
# coding: utf-8
# 学习numpy中矩阵的代码笔记
# 2018年05月29日15:43:40
# 参考网站:http://cs231n.github.io/python-numpy-tutorial/
import numpy as np
#==================矩阵的创建,增删查改,索引,运算=================================#
#==================矩阵的创建,增删查改=================================#
# # 创建行向量
# x = np.array([1,2,3])
# # 修改某个值
# x[0] = 0
# 注意下标索引从0开始,与MATLAB不一样
# print(x)
# print(x.shape)
# print(type(x))
#
# # 创建二维与多维矩阵
# matrix = np.array([[1,2,3],[1,2,3],[2,3,4]]) # 注意这里有一个小括号,小括号中还有一个中括号
# # 取出某个元素
# a1 = matrix[0][0]
# print(a1)
# print(matrix.shape)
#
# # # 创建特殊矩阵
# # 0矩阵
# zeros = np.zeros((2,2))# 注意,这里有两个小括号,并且返回浮点型数据,而不是整形
# print(zeros)
#
# # 创建1矩阵
# ones = np.ones([3,3])# 注意这里也是两个括号,其中里面的小括号也可是中括号,但是不建议使用
# print(ones)
#
# # 创建元素相同()的矩阵
# full = np.full((2,3),2) #其中第一个括号表示矩阵大小,后面的数字表示填充的数字
# print(full)
#
# # 创建对角数为1的矩阵
# diag = np.eye(3,3)#注意这里如果行列数不同,只会让行列下标相等的元素为1
# print(diag)
#
# # 创建随机矩阵(值在0到1之间),注意这个方式不可以重复,也就是随机不可以全部重现,每次运行都会不一样
# random = np.random.random((2,3))
# 写到这里,我需要说明一点,就是如何确定括号的个数
# numpy下的方法肯定是有一个小括号的,且不可以改变
# 想要表达多维阵列,则需要输入一个元祖(小括号)或者列表(中括号)来创建,这时就需要小括号或者中括号
# 如果是自己手敲出多维阵列,每一行需要中括号表示,用逗号分离每一行,然后外层再用一个中括号表示整个矩阵,然后再作为一个举证输入函数中
# print(random)
#=======================矩阵的索引,切片=========================#
metaMatrix = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#用逗号,而不能用空格
# # 单个元素的索引
# a = metaMatrix[0][0]
# b = metaMatrix[0,0] # 这里不能使用小括号
# print(a)
# print(b)
#
# # 切片操作
# a_ = metaMatrix[0:2,1]# 注意这里冒号后面的数是不索引的,如果缺省就是到最后,冒号前是可以得到的
# # 冒号后的数不索引,这时python的特点,与MATLAB不一样
# print(a_)
#
# # 注意切片操作后矩阵维度的变化
# a1 = metaMatrix[0:1,:]
# a2 = metaMatrix[0,:]
# b = metaMatrix[0,1]
# print(a1)
# print(a2)
# print(b)
# # 注意到这两行代码得到的数据是一样的,但是维度已经发生了变化
# print(a1.shape) #a1仍然是矩阵
# print(a2.shape) #a2则是一个行向量,相比原矩阵,这里就少了一个维度,这与MATLAB有点不同
# print(b.shape) #b是没有维度的,就是一个数而已
#
# # 利用已有矩阵创建新矩阵,方法比较多样化
# SrcMatrix = np.array([[1,2], [3, 4], [5, 6]])
# print(SrcMatrix)
# # 利用矩阵的方式索引原有矩阵
# matrix1 = SrcMatrix[[0,1],[1,1]]# 这时将两个中括号的对应元素组合起来进行索引,是单个元素索引的扩展
# # 进行单个元素索引,然后组合起来,并用np.array创建成np的数组
# matrix2 = np.array([SrcMatrix[0][1],SrcMatrix[1][1]])
# # 如果不用np.array来创建成np的矩阵,就会导致数据格式的变化,对应的操作就会发生变化
# matrix3 = [SrcMatrix[0][1],SrcMatrix[1][1]]
# print(matrix1)
# print(matrix2)
# print(matrix3)
# print(type(matrix1))
# print(type(matrix2))
# print(type(matrix3))
#
# # numpy矩阵的元素索引方式可以用于改变或者选择矩阵不同行的元素(不仅仅是同一列的数据)
# a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
# b = np.array([0,2,0,1])
# # 先介绍一下np.arrange()函数,表示创建一个从起始值到结束值少1(前面提到过,python中经常不到这个值)的行向量,也可以设定步长
# c = a[np.arange(4),b] #其实就是相当于矩阵方式索引一个矩阵中的元素(这比MATLAB中更加自由一些)
# print(c)
# # 改变矩阵的指定元素
# a[np.arange(4),b] += 10
# print(a)
#
# # 布尔型阵列,可以用来索引一些满足特定条件的元素
# matrix = np.array([[1,2],[3,4],[5,6]])
# bool_id = matrix>2 # 也可以写成bool_id =(matrix>2),注意,写成中括号就是不同含义了
# print(bool_id)
# print(matrix[bool_id])
# # 可以将上面两行代码合成一行
# matrix_ = matrix[matrix>2]# 注意,这里得到的是一维向量
# print(matrix_)
#
#=========================numpy array的数据类型=======================================#
# # numpy的array的数据类型是自动识别的,但也可以指定
# # 如果输入为整形,则会给数据的类型定义为int64
# matrix1 = np.array([1,2,3])
# print(matrix1.dtype)
# # 如果输入的数据为小数点,则会给数据类型定义为float64
# matrix2 = np.array([1.0,2.0,3.0])
# print(matrix2.dtype)
# # 如果有浮点型也有整形数据,会赋值给占字节数多的数据类型,且对应为64的
# matrix3 = np.array([1,2.0])
# print(matrix3.dtype)
# # 也可以指定数据类型
# matrix4 = np.array([1,2],dtype=np.int8)
# print(matrix4.dtype)
# # 当数据本身和指定的数据类型不符合时,会将数据转化成指定的数据类型,有可能会发生溢出
# matrix5 = np.array([1,2000000,3.1],dtype=np.int8)
# print(matrix5)
# print(matrix5.dtype)
#=========================矩阵的运算===================================#
#
# # 两种加法和减法,乘除
# x = np.array([[1,2],[3,4]])
# y = np.array([[5,6],[7,8]])
# sum1 = x + y# 直接使用加法
# sum2 = np.add(x,y)# 运用numpy的函数
# print(sum1)
# print(sum2)
#
# substract1 = x - y
# substract2 = np.subtract(x,y)
# print(substract1)
# print(substract2)
#
# prodution1 = x * y# 这是对应元素的乘法
# prodution2 = np.multiply(x,y)
# print(prodution1)
# print(prodution2)
#
# devide1 = x/y
# devide2 = np.divide(x,y)
# # 注意矩阵进行运算时,数据类型不改变,因此,需要注意溢出现象等
# print(devide1)
# print(devide2)
#
# # 矩阵的两种向量乘法(使用dot)
# x = np.array([[1,2],[3,4]])
# y = np.array([[5,6],[7,8]])
# multiDot1 = x.dot(y)
# multiDot2 = np.dot(x,y)
# print(multiDot1)
# print(multiDot2)
#
# # 矩阵运算基本函数
# x = np.array([[1,2],[3,4]])
# # 求和函数
# # 对所有元素求和
# sum_all = np.sum(x)
# # 对列求和
# sum_column = np.sum(x, 0)# 注意和MATLAB中的区分一下。
# # 对行求和
# sum_row = np.sum(x, 1)
# print(sum_all)
# print(sum_column)
# print(sum_row)
#
# # 矩阵的转置
# x = np.array([[1,2],[3,4]])
# transform = x.T
# print(transform)
#
# # broadcasting的应用,可以进行不同维度的矩阵算数运算
# # 考虑将一个常量行向量加到一个矩阵的每一行上
# # 下面会将x行向量加到y矩阵的每一行上(但是这个方法由于有显示循环,而显示循环比较慢一些,我们经常会采用其他方法)
# y = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
# x = np.array([1, 0, 1])
# y_ = np.empty_like(y) # 创建一个和y相同维度的矩阵,但没有放内容,但是已经开辟了一块内存,其中的数据可能随机
# print(y_)
# for i in range(4):
#  y_[i,:] = y[i,:] + x
# print(y_)
# # 另一种方法是我们先将x复制3份,垂直放置,组成一个矩阵,再进行矩阵加法
# x_ = np.tile(x,(4,1))# np.tile表示复制,(4,1)表示将x作为元素,组成4*1的矩阵形式
# y__ = np.add(y,x_)
# print(y__)
# # 实际上,如果不对x进行处理,而直接将两者相加,如果x和y满足一些条件,x会自动复制
# # 条件是x和y在一个维度上相等,另一个维度上不一样并且可以通过复制可以实现维度相等,则会自动复制
# print(y+x)
# # 这里进行一个其他的测试
# print(x.T+y.T)# 可以看出可以实现列的复制
# 这里进行都不为向量的相加
# a1 = np.array([[1,2],[3,4],[5,6],[7,8]])
# a2 = np.array([[1,0],[0,1]])
# print(a1+a2)# 这里会出错,说明只能自动进行一维数据的复制,多维数据不支持自动复制,而需要显式复制
# # 同样的,加法,减法和除法也都适合上面的自动复制原理
# 将一个矩阵或者向量进行维度的调整
x1 = np.array([1,2,3])
y1 = np.array([1,2])
# 实现x1和y1转置的矩阵乘法,可以先将y1变成列向量
print(np.multiply(x1, np.reshape(y1,(2,1))))
# 试一下其他的维度变化
x2 = np.array([[1,2],[3,4],[5,6],[7,8]])
print(np.reshape(x2, (2,4)))
print(np.reshape(x2, (4,2)))# 基本上按照西安航后列的顺序进行

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py

    安装完 anaconda 运行如下代码执行不了 import numpy as np import os,sys #获取当前文件夹,并根据文件名 def path(fileName): p=sys.path[0]+'\\'+fileName return p #读文件 def readFile(fileName): f=open(path(fileName)) str=f.read() f.close() return str #写文件 def writeFile(fileName,str):

  • python numpy之np.random的随机数函数使用介绍

    np.random的随机数函数(1) 函数 说明 rand(d0,d1,..,dn) 根据d0‐dn创建随机数数组,浮点数, [0,1),均匀分布 randn(d0,d1,..,dn) 根据d0‐dn创建随机数数组,标准正态分布 randint(low[,high,shape]) 根据shape创建随机整数或整数数组,范围是[low, high) seed(s) 随机数种子, s是给定的种子值 np.random.rand import numpy as np a = np.random.ran

  • Python numpy线性代数用法实例解析

    这篇文章主要介绍了Python numpy线性代数用法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 numpy中线性代数用法 矩阵乘法 >>> import numpy as np >>> x=np.array([[1,2,3],[4,5,6]]) >>> y=np.array([[7,8],[-1,7],[8,9]]) >>> x array([[1, 2, 3], [4

  • 讲解Python3中NumPy数组寻找特定元素下标的两种方法

    引子 Matlab中有一个函数叫做find,可以很方便地寻找数组内特定元素的下标,即:Find indices and values of nonzero elements. 这个函数非常有用.比如,我们想计算图1中点Q(x0, y0)抛物线的最短距离.一个可以实施的方法是:计算出抛物线上所有点到Q点的距离,找到最小值,用find函数找到最小值对应的下标,即M点横坐标和纵坐标对应的元素的下标,M点到Q点的距离就是最短距离. 首先给出Matlab使用find函数实现的代码: a = linspac

  • python中利用numpy.array()实现俩个数值列表的对应相加方法

    小编想把用python将列表[1,1,1,1,1,1,1,1,1,1] 和 列表 [2,2,2,2,2,2,2,2,2,2]对应相加成[3,3,3,3,3,3,3,3,3,3]. 代码如下: import numpy a = numpy.array([1,1,1,1,1,1,1,1,1,1]) b = numpy.array([2,2,2,2,2,2,2,2,2,2]) c = a + b print(type(c)) print(list(c)) 输出结果为: <class 'numpy.nd

  • Python 取numpy数组的某几行某几列方法

    直接分析,如原矩阵如下(1): (1) 我们要截取的矩阵(取其一三行,和三四列数据构成矩阵)为如下(2): (2) 错误分析: 取 C 的1 3行,3 4 列,定义 Z = [0,2] #定义行数 d = [2,3] #定义列数 #代码 C_zd = C[z,d] 则结果为: 由结果分析取的是第一行第三列和第三行第四列的数据,并非我们想要的结果. 正确分析: C_A = c[[0,2]] #先取出想要的行数据 C_A = C_A[:,[2,3]] #再取出要求的列数据 print(C_A) #输

  • Python Numpy计算各类距离的方法

    详细: 1.闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离(Chebyshev Distance) 5.夹角余弦(Cosine) 6.汉明距离(Hamming distance) 7.杰卡德相似系数(Jaccard similarity coefficient) 8.贝叶斯公式 1.闵氏距离的定义: 两个n维变量A(x11,x12,-,x1n)与 B(x21,x

  • 在Python3 numpy中mean和average的区别详解

    mean和average都是计算均值的函数,在不指定权重的时候average和mean是一样的.指定权重后,average可以计算一维的加权平均值. 具体如下: import numpy as np a = np.array([np.random.randint(0, 20, 5), np.random.randint(0, 20, 5)]) print('原始数据\n', a) print('mean函数'.center(20, '*')) print('对所有数据计算\n', a.mean(

  • python+numpy实现的基本矩阵操作示例

    本文实例讲述了python+numpy实现的基本矩阵操作.分享给大家供大家参考,具体如下: #! usr/bin/env python # coding: utf-8 # 学习numpy中矩阵的代码笔记 # 2018年05月29日15:43:40 # 参考网站:http://cs231n.github.io/python-numpy-tutorial/ import numpy as np #==================矩阵的创建,增删查改,索引,运算==================

  • Python使用numpy模块创建数组操作示例

    本文实例讲述了Python使用numpy模块创建数组操作.分享给大家供大家参考,具体如下: 创建数组 创建ndarray 创建数组最简单的方法就是使用array函数.它接收一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组. array函数创建数组 import numpy as np ndarray1 = np.array([1, 2, 3, 4]) ndarray2 = np.array(list('abcdefg')) ndarray3 = np.array([

  • Python实现的概率分布运算操作示例

    本文实例讲述了Python实现的概率分布运算操作.分享给大家供大家参考,具体如下: 1. 二项分布(离散) import numpy as np from scipy import stats import matplotlib.pyplot as plt ''' # 二项分布 (binomial distribution) # 前提:独立重复试验.有放回.只有两个结果 # 二项分布指出,随机一次试验出现事件A的概率如果为p,那么在重复n次试验中出现k次事件A的概率为: # f(n,k,p) =

  • Python使用sqlalchemy模块连接数据库操作示例

    本文实例讲述了Python使用sqlalchemy模块连接数据库操作.分享给大家供大家参考,具体如下: 安装: pip install sqlalchemy # 安装数据库驱动: pip install pymysql pip install cx_oracle 举例:(在url后面加入?charset=utf8可以防止乱码) from sqlalchemy import create_engine engine=create_engine('mysql+pymysql://username:p

  • Python Numpy库安装与基本操作示例

    本文实例讲述了Python Numpy库安装与基本操作.分享给大家供大家参考,具体如下: 概述 NumPy(Numeric Python)扩展包提供了数组功能,以及对数据进行快速处理的函数. NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用. 安装 通过pip安装numpy pip install numpy Numpy基本操作 >>> import numpy as np #一般以np作为numpy的别名 >>&

  • Python画柱状统计图操作示例【基于matplotlib库】

    本文实例讲述了Python画柱状统计图操作.分享给大家供大家参考,具体如下: 一.工具:python的matplotlib.pyplot 库 二.案例: import matplotlib.pyplot as plt import numpy as np #添加图形属性 plt.xlabel('Age range') plt.ylabel('Number') plt.title('The statistics of face age dataset') a = plt.subplot(1, 1,

  • Python对象属性自动更新操作示例

    本文实例讲述了Python对象属性自动更新操作.分享给大家供大家参考,具体如下: 在软件设计中会遇到这样的问题:有些属性之间有相互关联.这样,其中的一个属性变化的时候其他的属性也应该跟随变化. 先看一段示例代码: # -*- coding:utf-8 -*- #!python3 class DemoClss: def __init__(self,val1,val2): self.val1= val1 self.val2= val2 self.sum= self.val1 + self.val2

  • Python列表list排列组合操作示例

    本文实例讲述了Python列表list排列组合操作.分享给大家供大家参考,具体如下: 排列 例如: 输入为 ['1','2','3']和3 输出为 ['111','112','113','121','122','123','131','132','133','211','212','213','221','222','223','231','232','233','311','312','313','321','322','323','331','332','333'] 实现代码: # -*-

  • Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】

    本文实例讲述了Python实现监控键盘鼠标操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pythoncom import pyHook import time def onMouseEvent(event): "处理鼠标事件" fobj.writelines('-' * 20 + 'MouseEvent Begin' + '-' * 20 + '\n') fobj.writelines("Current Time:%s\

  • Python实现的字典排序操作示例【按键名key与键值value排序】

    本文实例讲述了Python实现的字典排序操作.分享给大家供大家参考,具体如下: 对字典进行排序?这其实是一个伪命题,搞清楚python字典的定义---字典本身默认以key的字符顺序输出显示---就像我们用的真实的字典一样,按照abcd字母的顺序排列,并且本质上各自没有先后关系,是一个哈希表的结构: 但实际应用中我们确实有这种排序的"需求"-----按照values的值"排序"输出,或者按照别的奇怪的顺序进行输出,我们只需要把字典转化成list或者tuple,把字典每

随机推荐