python实现矩阵叉乘_矩阵乘法的纯Python实现 | 离开Python库!!

77032fdf126cb1acfcd3a2fe6ab56671.gif点击关注我哦77032fdf126cb1acfcd3a2fe6ab56671.gif5604d5180ef8b19335b541accbc04c6c.png

一篇文章带你了解矩阵乘法的纯Python实现

在《这篇文章》中,我们有简单提到“矩阵乘法”的相关知识,如果你不记得了,可以复习一下这张图片。

0fc373e9a2bc283fcac511b7459f875f.png

想起来了没?本篇文章将深入探讨在没有机器学习库的情况下如何从零实现矩阵乘法!

你有没有想过在没有任何复杂的机器学习库的情况下处理机器学习问题?毕竟多亏了那些模块,才可以让我们的某些操作几乎可以在眨眼之间完成。

为了真正欣赏这些模块的美观和优雅,让我们从头开始进行代码矩阵乘法,而无需任何机器学习库或模块。尽管这不是一个非常复杂的任务,但这将有助于我们更好地学习核心概念并理解NumPy的重要性,它只需几行代码即可完成同一任务。

解决这个问题的方法是从用户那里获取所有输入。这是第一个和第二个矩阵的行数和列数。另外,根据每个矩阵的行数和列数,我们将分别填充相应的替代位置。

在进行任何矩阵乘法之前,第一步是检查两个矩阵之间的这种运算是否真的可行。这可以通过检查第一个矩阵的列数是否等于第二个矩阵中的行数来判断。这可以表述为:

矩阵A的行数 = 矩阵B的列数

根据这个策略,我们可以制定我们的第一个代码块。这可以按如下所示:

r1 = int(input("Enter No of rows of 1st Matrix: "))c1 = int(input("Enter No of columns of 1st Matrix: "))r2 = int(input("Enter No of rows of 2nd Matrix: "))c2 = int(input("Enter No of columns of 2nd Matrix: "))# for matrix multiplication to be possible no of columns in matrix 1 = no of rows in matrix 2if c1==r2:else:    print("\nNot possible")

这部分看起来非常简单。我们制定了仅在需要时执行矩阵运算的计划。现在,让我们看一下如何接收相应行和列的输入。

在继续之前,让我们提出一个我们正在努力解决的问题。下图是我们必须解决的问题。我采用了一种更简单的3 * 3和3 * 3矩阵组合,但我保证这种方法可以解决任何复杂的问题,即第一个矩阵的列与第二个矩阵的行匹配。

下图显示了相应的行数和列数:

bba77bd00bfe75f43a42f1000b6b22cc.png

现在,我们还制定了问题陈述,让我们从用户那里获得所需的输入,然后开始着手解决这个问题。这可以使用下面的代码中完成:

    mat1 = []    mat2 = []    result = []    print("\nEnter The Values in the matrix 1: ")    for i in range(r1):        g=[]        for j in range(c1):            g.append(int(input()))        mat1.append(g)    for i in range(r1):         for j in range(c1):             print(mat1[i][j], end = " ")         print()

在这里,我展示了如何遍历行和列以输入第一个矩阵的值。同样,您也可以对第二个矩阵重复这些步骤。完成此步骤后,您的输出应如下所示:

fcd355c6b0f452fe93f42958b34ab6aa.png

现在我们已经成功地完成了所有必需的输入。是时候循环这些值并开始计算它们了。所以,为了阐明矩阵乘法是如何工作的,我们将行与它们各自的列相乘。

矩阵的第一个值如下所示:

(1*1) + (2*4) + (3*7) = (1) + (8) + (21) = 30

可以使用以下代码完成此操作:

    for r in range(r1):        u=[]        for s in range(c2):            u.append(int(0))        result.append(u)    for r in range(r1):         for s in range(c2):             result[r][s]    print("\nResult is: \n")    # iterate through rows of r1    for x in range(len(mat1)):       # iterate through columns of c2       for y in range(len(mat2[0])):           # iterate through rows of r2           for z in range(len(mat2)):                result[x][y] += mat1[x][z] * mat2[z][y]    for r in result:        print(r)

这段代码将相应地计算结果,然后得到最终输出,如下所示:

901cc377a0499a4ae327a05d5bba7971.png

下图显示了已完成的相同计算。

b1b460053e161610e6fbf61bdb883120.png

e14ebfb67f3af5cc692651f2c1c53898.png

0bcb1336df64c689b49abfcb226a1827.png

现在,我们完成了与矩阵乘法的计算。但是,我很好奇这在numpy上如何工作。让我们看看——

使用Numpy的实现过程:

在仅使用python成功完成了矩阵乘法的工作之后,我们现在可以看看带有numpy模块的类似公式的样子。可以按照以下步骤进行:

import numpy as npa1 = np.array([[1,2,3],              [4,5,6],              [7,8,9]])a2 = np.array([[1,2,3],              [4,5,6],              [7,8,9]])Answer = np.matmul(a1,a2)Answer

a9437a9254e213af932d0505d4b4b19a.png

通过对比发现:使用Numpy进行操作时,几乎没有太多个人的操作,我们只需要知道在numpy中是如何计算的即可。但是至少让我们了解到了一些新的东西:体会到我们使用的机器学习库是多么美妙。

结论:

我们发现,如果不使用现有的出色的机器学习库,即使是仅需几行代码即可完成的简单任务(如矩阵乘法),也将花费更长的时间来执行。但是,尽管如此,理解核心基础知识和理解这些操作是如何执行的仍然很重要,我们在本文中确实做到了这一点。在本文中,我们研究了如何在不使用任何库的情况下对矩阵乘法进行编程。

·  END  ·

HAPPY LIFE

fe2970fabada2484751f28de58d82ff9.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Github Actions:再次改变软件开发

本文转自 FEPulse 公众号(微信搜索 FEPulse,精选国内外最新前端资讯,为你把握前端脉搏)。 Github Actions 是 GitHub Universe 大会上发布的,被 Github 主管 Sam Lambert 称为“再次改变软件开发”的一款重磅功能&…

为别人软件加入广告或者密码(特别思路)

洪雨的的这款软件比较奇特,是忽然想到一个思路,然后实现了一下。 exe文件都有一个很有趣的地方,只要内部完整,就可以运行。比如一个exe文件,我们运行的时候,电脑知道他是exe所以可以直接运行。假如洪雨将它…

Django 错误跳转页面

原网站:https://blog.csdn.net/goupper1991/article/details/50736826 django404,500错误自定义页面: 将 改为 1.修改settings文件DEBUG FalseALLOWED_HOSTS [127.0.0.1, localhost]或者ALLOWED_HOSTS [*]2.配置urls文件from django.conf.…

ElasticSearch-Hadoop:从Hadoop到ElasticSearch的产品视图计数索引和客户顶部搜索查询...

这篇文章涵盖了如何使用ElasticSearch-Hadoop从Hadoop系统读取数据并在ElasticSearch中对其进行索引。 它涵盖的功能是在最近n天中为每个客户的产品浏览量计数和热门搜索查询编制索引。 分析的数据可以进一步在网站上使用,以显示最近浏览过的客户,产品浏…

伸缩轨道_深度解析——伸缩喷漆房为什么这么受欢迎!

伸缩式喷漆房是一种环保喷漆设备,它可以在使用时,自动展开形成封闭或半封闭的环保喷漆房,不使用时收缩合拢到一处的特殊环保喷漆房设备,由于伸缩式喷漆房外观大方、简单实用且投资费用低,它在现代涂装应用中越发广泛。…

snippet,让你编码效率翻倍

为什么谈到Snippet 今天下午在用vscode做小程序的时候,发现很不方便,因为商店里提供的代码片段极为有限,而且平时几乎每天都需要用到代码片段,所以就在思考他们是怎么做到给别人提供代码的,我可以自定义代码片段吗。然…

day12-HTML基础之DOM操作

DOM(Document Object Model 文档对象模型) 一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象。可以通过dom对象中js提供的方法,找到html的各个标签。通过找到标签就可以…

小程序源码 租房管理系统_如何通过租房小程序开发快速引流

租房市场在整个房产市场占据了极大一部分市场份额,而随着租售同权政策的提出、房价的不断提升,租房市场份额将进一步扩大。合肥小程序开发智速新媒体公司传统的租房方式不管是出租方还是租房客户,彼此之间的消息不对等、沟通困难等因素导致房…

REST 101开发人员专用

本地代码执行 诸如C之类的高级语言中的函数将被汇编为Assembly中的过程 。 它们增加了一个间接级别,使我们不必考虑内存地址。 诸如Java之类的面向对象语言中的方法和多态性增加了另一种间接性 ,使我们不必考虑一组相似功能的特定变体。 尽管有这些间…

一个基于Bmob的OPPO锁屏壁纸小程序,写过之后发现...好像没什么卵用...一脸懵逼

小程序之前写的,也就前段时间,毛毛糙糙的写了第一版... 因为使用OPPO手机,所以有个锁屏杂志的东西,里面的图片每天都是由OPPO官方的人进行精选然后推送给用户的,图片菲菲菲菲菲常漂亮,看到网上很多人提取不…

SQLAlchemy 操作数据库

SQLAlchemy 操作数据库 SQLAlchemy为Python提供了不同数据库的统一接口,采用ORM的方式操作数据库,简洁优雅 一、安装 直接通过pip安装即可 pip install sqlalchemy 二、连接数据库 这里用小巧的sqlite来做测试 from sqlalchemy import create_engine# 创…

贝塞尔曲线理解与应用

贝塞尔曲线并非是由贝塞尔发明的,但是是因为他把这个东西应用到当时的汽车领域而闻名的,所以取名为贝塞尔曲线。 在我看来,用简单的话来理解一下贝塞尔曲线,他是通过少量几个点,使用一套公式,生成一条平滑曲…

云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server

【阿里云ECS】(一)云服务器上安装RStudio-server最近注册了阿里云个人版,打算研究研究shiny部署问题。进了阿里云ECS因为是Ubuntu16.04的对于安装R和RStudio还是要学习实践一下的。第一步,安装R语言。我们使用apt的方式进行安装,步…

H5前期知识点总结 9月12日

知识点补充: 属性继承例子,color、font(font-size/style/family/weight) 1、浏览器的默认字体大小是16px,谷歌浏览器的最小字体是10px,其他浏览器的最小字体是12px。 2、通配符选择器 “*”,即选中body里所有的标签。 …

Spring MVC:Ajax和JQuery

今天,我想演示如何将AJAX集成到Spring MVC应用程序中。 我将在客户端使用JQuery来发送请求和接收响应。 本教程将基于我以前关于Spring MVC和REST服务的教程之一。 在本文中,您将了解如何在异步请求的帮助下使Web应用程序更具交互性。 准备工作 我需要通…

手把手带你写一个JavaScript类型判断小工具

业务写了很多,依然不是前端大神,我相信这是很多‘入坑’前端开发同学的迷茫之处,个人觉得前端职业发展是有路径可寻的,前期写业务是一个积累过程,后期提炼总结,比如编程思想,父子类的原型继承&a…

yolov3之pytorch源码解析_springmvc源码架构解析之view

说在前面前期回顾sharding-jdbc源码解析 更新完毕spring源码解析 更新完毕spring-mvc源码解析 更新完毕spring-tx源码解析 更新完毕spring-boot源码解析 更新完毕rocketmq源码解析 更新完毕dubbbo源码解析 更新完毕netty源码解析 更新完毕spring源码架构更新完毕springmvc源码架…

Xstream将XML转换为javabean的问题

1.问题:Xstream is not security 解决方法:加上 2.问题:如果没有第二行代码,会出现xstream forbiddenclassexception 解决方法:加上第二行,其中参数是要进行解析的对象! 调用该方法:…

蚂蚁属性细微差别

每隔一段时间,我会想起Ant属性的一些细微差别 ,一旦忘记它们,在与Ant交互时会引起混乱。 特别是, Ant属性 通常是不可变的 (不包括Ant 1.8版本的 局部属性 ),并且在其首次设置时“永久”设置&am…

《从零构建前后分离的web项目》准备 - 前端了解过关了吗?

前端基础架构和硬核介绍 技术栈的选择 首先我们构建前端架构需要对前端生态圈有一切了解,并且最好带有一定的技术前瞻性,好的技术架构可能日后会方便的扩展,减少重构的次数,即使重构也不需要大动干戈,我通常选型技术栈…