AB矩阵秩1乘法,列乘以行

1. AB矩阵相乘

在这里插入图片描述

2. 代码测试

  • python 代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :ABTest.py
# @Time      :2024/11/17 8:37
# @Author    :Jason Zhang
import numpy as np
from abc import ABCMeta, abstractmethod

np.set_printoptions(suppress=True, precision=3)
np.random.seed(1213)


class ABMultipy(metaclass=ABCMeta):
    @abstractmethod
    def execute(self, in_a, in_b):
        pass

    @abstractmethod
    def result(self):
        pass


class DoProduct(ABMultipy):
    def __init__(self, in_a, in_b):
        self.in_a = in_a
        self.in_b = in_b

    def execute(self, in_a, in_b):
        my_result = in_a @ in_b
        return my_result

    def result(self):
        get_result = self.execute(self.in_a, self.in_b)
        #   print(f"result=\n{get_result}")
        return get_result


class ColumnRowProduct(ABMultipy):
    def __init__(self, in_a, in_b):
        self.in_a = in_a
        self.in_b = in_b

    def execute(self, in_a, in_b):
        a_r, a_c = np.shape(self.in_a)
        b_r, b_c = np.shape(self.in_b)
        result1 = np.zeros((a_r, b_c))
        if a_c == b_r:
            for i in range(a_c):
                result1 += np.outer(self.in_a[:, i], self.in_b[i, :])
        return result1

    def result(self):
        get_result1 = self.execute(self.in_a, self.in_b)
        #   print(f"result=\n{get_result1}")
        return get_result1


class CheckResult(object):
    def __init__(self):
        self.step = 5
        self.shape_abc = np.random.choice(20, (3, self.step), replace=False)

    def execute(self):
        # print(self.shape_abc)
        for i in range(self.step):
            a_row, a_column, b_column = self.shape_abc[:, i]
            b_row = a_column
            matrix_a = np.random.randint(1, 20, (a_row, a_column))
            matrix_b = np.random.randint(1, 20, (b_row, b_column))
            #  print(f"*" * 50)
            #  print(f"a_row={a_row}")
            #  print(f"a_column={a_column}")
            #  print(f"b_column={b_column}")
            #  print(f"*" * 50)
            my_strategy_do_product = DoProduct(matrix_a, matrix_b)
            result1 = my_strategy_do_product.result()
            my_strategy_column = ColumnRowProduct(matrix_a, matrix_b)
            result2 = my_strategy_column.result()
            check_result = np.allclose(result1, result2)
            print(f"*" * 50)
            print(f"matrix_a=\n{matrix_a}")
            print(f"matrix_b=\n{matrix_b}")
            #    print(f"result1=\n{result1}")
            #    print(f"result2=\n{result2}")
            print(f"result1 is {check_result} same with result2")


if __name__ == "__main__":
    run_code = 0
    my_test = CheckResult()
    my_test.execute()

  • 运行结果:
**************************************************
matrix_a=
[[15 15 14 13 19 10 12  2 11 11  4  9]
 [13 10 19  3 18 13  7 11  8 13  7  7]
 [13  2 18 17  2 14 16 11  6 18  2 12]
 [ 5 18 18  8 12 14 14  7  9  9 15  7]
 [18  5 12  7 11  4  6  2 18  8 12  3]
 [ 6  7 13 11  1  6 18 18 17  9 13  7]
 [19  3 13  1 11 17 14  5  9 16 18 16]
 [12 18 14 16  8  8 10 15 18 11  1 13]
 [10  7 12  3  1  6  2 11  9  9 19  4]
 [18 19 16 15 13  9  1  5 10  6 14  1]
 [15 17 16  2  5  1 18 15 13 16  2 16]
 [11  8 18 14  7 12 11 12 17 12 16 19]
 [ 4 13  3  1  1  4 15 12 13 11  1 17]
 [12 18  5  4 10  2  8 18 10 16 12  6]
 [ 3  2 19  3  7 17  8  3 11 17 14 10]
 [ 6 18 18 11 12  7  9  9 14  8  2  1]
 [10  2  6  5  1  6 10 15  6  7 16 15]
 [ 7 14  5  8  4 10  5 11  7 15 15 19]
 [18  7 19 10 13 13  2  7  5 12 13 17]]
matrix_b=
[[ 7 14 14 13  2  5]
 [16  2 18 19 15 10]
 [13 13  5  8 14 19]
 [19  1  7  3  4  9]
 [16  2  3  5 13  6]
 [ 7  7  1  2 19 10]
 [ 7  9  6  8 17  5]
 [17  4  5  7 10  9]
 [ 1 13 16 11  8  6]
 [19 18 16  1  3 18]
 [16 16 19 11 17 11]
 [10  4 16 17 13  7]]
result1 is True same with result2
**************************************************
matrix_a=
[[19 15  5  3  8  4 10  3 14  6 11  3  4]
 [16  3  6  1 17  8 10  4  3 17  8  9  7]
 [ 1  5 17 13  8 18 11 15  7 14 12 17 12]
 [18  5  1  6 13 17 18  9  1 12 18  1  1]
 [12  9 18 16  2  8  3 13  2  2  1 13  4]
 [19  5  8 19 15 19 15  4 16 16 12  6 19]
 [ 2  1 14  3  7 14  4 17  7 12  8 16  8]
 [ 2 18 14 18 11 10 17 19 10  3 13  3 14]
 [13 17 17 12  8  9  1  7 13  8 19 14  4]
 [ 7  8 11 17 11  5 15  6 19 12 18  4  9]
 [ 7  9  4 11 18  2 16  5 10 18  2 10 14]
 [14  2 18 15 13 12 13 15 11 19  8  1  6]
 [15  9  2 11  7 10  5  2  9 16  2 19 18]
 [18  4  4  9  5 10 19 17  8  7 13  2  6]
 [11  9 16 13 11 11  4  5 16  1 12 10 12]
 [17  3  8 13 18  3 15 12  3  5 11 16 15]
 [ 4  6  2 17  4 16 19 10 13 15 17 13 19]]
matrix_b=
[[ 8  8 13  9  8  4  4  9 15 17 10  2 19 14]
 [ 1  2  2  5 13  8 16 10  7  2 19 18 15 16]
 [15 13  2 18  2 12  5 19 17  2 11 10  8 16]
 [ 3  4 11  5 16 19  2  2 18 12 11 12 12 11]
 [18 16 15 15  3 11  1 12 10  1 16  6  8 19]
 [10  2 12  2  6 16  4  5  7  6  7 16 12 19]
 [10 10 15  4 15 17 11 18  8  9 14  7  1 11]
 [ 3  8  8 18  9 10 17  2  8 17 11  5  3  1]
 [15 17 19  4  5  6  4 17  6  6 14  7 11  8]
 [ 3 19  2 17  5  7 15  7 14 12  6 19  7  6]
 [19 16  3 17  3  2 13 16 11  5 19 17 17 12]
 [ 9 19  8  6  6  9  9  4  1 13  8 15 19  5]
 [12  9  9  8  7 16 10  1 16  8 19 18  9 18]]
result1 is True same with result2
**************************************************
matrix_a=
[[18 10 13 16 12 16  1 19  4 18  6 13 18 19  6  6 16 11]
 [15 10 13 15 18  8 13 13 15  5 15 11 11 13  7 17  2 14]]
matrix_b=
[]
result1 is True same with result2
**************************************************
matrix_a=
[[14 16  4 16  6 14  7  5  5]
 [18  5 13  4 12 16 10  7  9]
 [ 6 16  2  3 14 12  8 11 18]
 [ 7  5 13  5 12  7 15  8  2]
 [10 17  3  4 16 17  9  5 17]
 [10  6 15 16  2 11 11  8  3]
 [ 8 15  8 17 11  9  4  7  2]]
matrix_b=
[[10  8  8  4  4  5 11 11]
 [ 1 17  4 10 16 10 19 11]
 [19 10 14  4  3 16 19  7]
 [11 16  8  1 13 13 10 12]
 [ 6 12 11 15 16 12  2  5]
 [ 6  6 15  7  8 14 10  6]
 [ 5 17 12  4  7 17  3 10]
 [ 4  2 11 13  3 13 16 18]
 [ 7  3 16 17 11  6 15 18]]
result1 is True same with result2
**************************************************
matrix_a=
[[16  9 16]]
matrix_b=
[[ 4 14 11  5]
 [ 9  7 16  7]
 [ 4 11  9 19]]
result1 is True same with result2

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍,它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速,小型且功能丰富的JavaScript库,jQuery设计宗旨是“write less,do more”,即倡导写更少的代码,做更多的事&#xf…

stm32下的ADC转换(江科协 HAL版)

十二. ADC采样 文章目录 十二. ADC采样12.1 ADC的采样原理12.2 STM32的采样基本过程1.引脚与GPIO端口的对应关系2.ADC规则组的四种转换模式(**)2.2 关于转换模式与配置之间的关系 12.3 ADC的时钟12.4 代码实现(ADC单通道 & ADC多通道)1. 单通道采样2. 多通道采样 19.ADC模数…

124. 二叉树中的最大路径和【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…

【安全科普】NUMA防火墙诞生记

一、我为啥姓“NUMA” 随着网络流量和数据包处理需求的指数增长,曾经的我面对“高性能、高吞吐、低延迟”的要求,逐渐变得心有余而力不足。 多CPU技术应运而生,SMP(对称多处理)和NUMA(非一致性内存访问&a…

免费送源码:Java+Springboot+MySQL Springboot多租户博客网站的设计 计算机毕业设计原创定制

Springboot多租户博客网站的设计 摘 要 博客网站是当今网络的热点,博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了“博客”文化。本文课题研究的“…

数字IC后端实现之Innovus specifyCellEdgeSpacing和ICC2 set_placement_spacing_rule的应用

昨天帮助社区IC训练营学员远程协助解决一个Calibre DRC案例。通过这个DRC Violation向大家分享下Innovus和ICC2中如何批量约束cell的spacing rule。 数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案 下图所示为T12nm A55项目的Ca…

IntelliJ+SpringBoot项目实战(七)--在SpringBoot中整合Redis

Redis是项目开发中必不可少的缓存工具。所以在SpringBoot项目中必须整合Redis。下面是Redis整合的步骤: (1)因为目前使用openjweb-sys作为SpringBoot的启动应用,所以在openjweb-sys模块的application-dev.yml中增加配置参数&…

深挖C++赋值

详解赋值 const int a 10; int b a;&a 0x000000b7c6afef34 {56496} &a 0x000000b7c6afef34 {10} 3. &b 0x000000b7c6afef54 {10} 总结: int a 10 是指在内存中(栈)中创建一个int (4 byte)大小的空间…

java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程

文章目录 PC Register堆虚拟机栈方法区(Metaspace元空间双亲委派机制类加载器 类装载的执行过程 PC Register 程序计数器(Program Counter Register)是 Java 虚拟机(JVM)中的一个组件,它在 JVM 的内存模型中扮演着非常…

11.12机器学习_特征工程

四 特征工程 1 特征工程概念 特征工程:就是对特征进行相关的处理 一般使用pandas来进行数据清洗和数据处理、使用sklearn来进行特征工程 特征工程是将任意数据(如文本或图像)转换为可用于机器学习的数字特征,比如:字典特征提取(特征离散化)、文本特征提取、图像特征提取。 …

STL序列式容器之list

相较于vector的连续性空间&#xff0c;list相对比较复杂&#xff1b;list内部使用了双向环形链表的方式对数据进行存储&#xff1b;list在增加元素时&#xff0c;采用了精准的方式分配一片空间对数据及附加指针等信息进行存储&#xff1b; list节点定义如下 template<clas…

算法日记 26-27day 贪心算法

接下来的题目有些地方比较相似。需要注意多个条件。 题目&#xff1a;分发糖果 135. 分发糖果 - 力扣&#xff08;LeetCode&#xff09; n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每…

Linux下编译MFEM

本文记录在Linux下编译MFEM的过程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1Boost1.74.0oneAPI2024.2.1 一、安装依赖 二、编译代码 附录I: CMakeUserPresets.json {"version": 4,"configurePresets": [{&quo…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程&#xff08;9&#xff09;&#xff1a;使用 数据表&#xff08;DataTable 参数&#xff09; 来传递参数 前言一、什么是 datatable 参数&#xff1f;Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

使用 Prompt API 与您的对象聊天

tl;dr&#xff1a;GET、PUT、PROMPT。现在&#xff0c;可以使用新的 PromptObject API 仅使用自然语言对存储在 MinIO 上的对象进行总结、交谈和提问。在本文中&#xff0c;我们将探讨这个新 API 的一些用例以及代码示例。 赋予动机&#xff1a; 对象存储和 S3 API 的无处不在…

Oracle OCP认证考试考点详解082系列19

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 91. 第91题&#xff1a; 题目 解析及答案&#xff1a; 关于 Oracle 数据库中的索引及其管理&#xff0c;以下哪三个陈述是正确的&#x…

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆&#xff0c;或许最大受益者仍是 AI&#xff0c;因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代&#xff0c;实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实&#xff0c;从空间视频到脑机接口&…

Element UI如何实现按需导入--Vue3篇

前言 在使用 Element UI 时&#xff0c;按需导入&#xff08;即按需引入&#xff09;是一个常见的需求&#xff0c;尤其是在构建大型应用时。按需导入可以显著减少打包后的文件体积&#xff0c;提升应用的加载速度。本文将详细介绍如何在项目中实现 Element UI 的按需导入&…

【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入

《设计模式之行为型模式》系列&#xff0c;共包含以下文章&#xff1a; 行为型模式&#xff08;一&#xff09;&#xff1a;模板方法模式、观察者模式行为型模式&#xff08;二&#xff09;&#xff1a;策略模式、命令模式行为型模式&#xff08;三&#xff09;&#xff1a;责…