matrix-multiplication 相关问题

与矩阵乘法有关的问题,尤其是实现。数学问题应该考虑线性代数标签。

从 C 中的函数返回二维数组

我将一个矩阵输入到一个函数中,我想输出它本身的乘法。我无法设法以正确的格式返回结果。 int **multiplyMatrix(int matrixA[10][10], int ma...

回答 1 投票 0

Three.js 变换前重置矩阵

我想多次对 Three.js 网格应用相同的矩阵变换,但我只想要第一次变换所描述的变换。我怎样才能将网格的矩阵“重置”为...

回答 2 投票 0

将稀疏向量插入稀疏矩阵

我想使用稀疏矩阵和稀疏向量设置稀疏矩阵的列。试图检查相关文件,但我在这部分陷入困境。这可能吗? 如果它有帮助我正在建设......

回答 1 投票 0

Python 反转非交换就地运算符的元素顺序

Python 提供就地运算符(+=、*=、/=、@= 等)来提高更改变量时的内存效率。但是,您正在修改的变量始终位于运算符的“左侧”:a ...

回答 1 投票 0

稀疏张量乘法

我在 ytorch 工作,正在寻求张量乘法的指导。我拥有形状为 [b, n, n, i] 和 [i, k] 的张量。我的目标是执行乘法并获得形状张量...

回答 1 投票 0

如何将两个矩阵(来自输入)相乘?

我想获取 n 并定义两个 n*n 矩阵,然后将它们作为输入,然后将它们相乘,但我不知道如何获取两个矩阵作为输入。 .data 节 输入格式:db“%d”,0...

回答 1 投票 0

两个矩阵相乘

我想获取 n 并定义两个 n*n 矩阵,然后将它们作为输入,然后将它们相乘,但我不知道如何获取两个矩阵作为输入 .data 节 输入格式:数据库“%d”,0 编号:dd 1

回答 1 投票 0

你能优化矩阵函数而不是向量吗?

我有以下两种资产 A 和 B 的权重和股票收益矩阵: weights = np.array([[.6, .4], [.5, .5], [.4, .6]]) # 所有元素 w: 0 < w < 1 returns = np.array([[1.25, 2...

回答 1 投票 0

矩阵代数 – 这个实现正确吗?

我正在尝试学习如何在Python中使用矩阵代数,为了做到这一点,我决定实现下面给出的最大夏普比率公式 这是我对公式的实现 定义

回答 1 投票 0

如何将两个矩阵相乘,用不同的运算符替换 *

考虑: 库(矩阵) 一个<- matrix(c(1,2,3,4,5,6), nrow=3) A t(A) A %*% t(A) This gives: # A # [,1] [,2] # [1,] 1 4 # [2,] 2 5 # [3,] 3 6 # # t(A) # [,1] [,...

回答 1 投票 0

如何多重播放两个矩阵,用不同的运算符替换 *,例如 min()

考虑: 库(矩阵) 一个<- matrix(c(1,2,3,4,5,6), nrow=3) A A %*% t(A) This gives: # A # [,1] [,2] # [1,] 1 4 # [2,] 2 5 # [3,] 3 6 # # A %*% t(A) # [,1]...

回答 1 投票 0

调整Python中辅助矩阵的输出大小

隐藏层激活后,我想创建一个辅助矩阵,以更好地捕获下面代码片段中数据的时间方面。返回变量的当前形状是 [out_cha...

回答 1 投票 0

CUDA 矩阵乘法中的分段错误(核心转储)

我正在开发用于矩阵乘法的 CUDA 程序,并且遇到“分段错误(核心转储)”错误。我已经包含了下面代码的相关部分。错误发生...

回答 1 投票 0

x86 内在:优化复杂浮点数的矩阵乘法

以下代码用于将复数浮点矩阵(单独的 Real、Imag)与浮点矩阵相乘。 我很确定它可以通过由于加载、存储和乘法的延迟而重新排序代码来优化...

回答 1 投票 0

如何使用 SSE 对向量矩阵乘积进行向量化?

我在C++中有这个函数 无效例程2(浮动阿尔法,浮动贝塔){ 无符号整型 i, j; 对于 (i = 0; i < N; i++) for (j = 0; j < N; j++) w[i] = w[i] - beta + alph...

回答 1 投票 0

如何使用 SSE 正确向量化向量矩阵乘积?

我在C++中有这个函数 无效例程2(浮动阿尔法,浮动贝塔){ 无符号整型 i, j; 对于 (i = 0; i < N; i++) for (j = 0; j < N; j++) w[i] = w[i] - beta + alph...

回答 1 投票 0

为什么使用 SSE 对向量矩阵乘积进行向量化结果不正确?

我在C++中有这个函数 无效例程2(浮动阿尔法,浮动贝塔){ 无符号整型 i, j; 对于 (i = 0; i < N; i++) for (j = 0; j < N; j++) w[i] = w[i] - beta + alph...

回答 1 投票 0

矩阵乘法逆向应用是什么意思?

我不明白这一点,这是来自 https://learnopengl.com/Getting-started/Transformations 教程,它解释了在代码中我们首先翻译然后旋转,实际上旋转...

回答 1 投票 0

如何加速密集矩阵乘法?

我想加速倍增打击: 这是我需要改进的代码: 无效乘法(int大小,int ** matA,int ** matB,int ** matC){ for(int i=0;i 我想加速倍增打击: 这是我需要改进的代码: void multiply(int size, int **matA, int **matB, int ** matC) { for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { int t = matC[i][j]; for(int k=0;k<size;k++) { t += matA[i][k] * matB[k][j]; } matC[i][j] += t; } } } 我有两个矩阵和一个大小为 5000x5000 的结果矩阵。 巨大的矩阵可能意味着它们无法完全加载到缓存中? for循环中是否出现过多页错误?我想知道如何加快乘法速度,以及如何组织数据(使用一维数组还是二维数组?) 我的答案代码是列表blow,我选择使用1d数组来模拟2d数组(每个矩阵使用new []一次),但我不确定使用2d数组时是否更快。 我使用临时矩阵来存储 matB 的转置矩阵,以避免 for 循环中的页面错误。 我添加 AVX2 以获得更高的性能。 使用大小为 5000x5000 的一维数组或二维数组哪个更好? 还有其他想法或技巧吗? int** allocate(int rows, int cols) { int ** mat; mat = new int*[rows]; int *temp = new int[rows*cols]; for(int i = 0; i<rows; i++) { mat[i] = temp + i * cols; } return mat; } void multiply(int size, int **matA, int **matB, int ** matC) { int i; int n = size*size; // total size // column-major order int **transMatB = allocate(size, size); int *transArrB = transMatB[0]; //copy transposed data, maybe many page faults here. #pragma omp parallel for for(i = 0; i < n; i++) { transMatB[i/size][i%size] = matB[i%size][i/size]; } #pragma omp parallel for for(i = 0; i < n; i ++) { int *row = matA[i / size]; int *col = transMatB[i % size]; int temp; #ifdef __AVX2__ temp = multiplyAndSumArrays(row, col, size); #else temp = 0; for (int k = 0; k < size; k ++) { temp += row[k] * col[k]; } #endif matC[i / size][i % size] += temp; } // remove temp transposed mastrix delete[] transMatB[0]; delete[] transMatB; transMatB = nullptr; } 在优化方面,矩阵-矩阵乘法可能是研究最多的内核。对于最终结果,请阅读 Goto 和 van de Geijn 的论文,引用如下。 关键在于 该算法对 n^2 数据进行 n^3 次操作,因此具有在缓存中重用数据的潜力。 简单的 3 循环版本无法重复使用,因此您需要做一些事情。 幸运的是,所有输出组件都是独立的,因此您可以对操作进行重大改组。 特别是最后一点:简而言之,3 个循环中的每一个都分为两个循环,一个在块上,一个在块内。然后你有 6 个循环(意味着 5 个!左右不同的算法)和 3 个块大小作为调整参数。上面的论文对此分析得很完整。 请注意,这并不简单!对于合理可行的解决方案,请执行递归 2x2 乘法:将每个矩阵划分为 2x2 块结构,然后递归地相乘。当块足够小以适合缓存时,您将停止递归。 这应该可以作为课堂作业来实现,从而提高成绩。您甚至可以简单地进行多线程处理。 Goto, Kazushige / Geijn, Robert A. van de Anatomy of high-performance matrix multiplication 2008 ACM Trans. Math. Softw. , Vol. 34, No. 3 ACM: New York, NY, USA p. 1-25

回答 1 投票 0

使用 Numba JIT 与转置 NumPy 数组进行矩阵乘法不起作用

环境 操作系统:Windows 10 Python版本:3.10 Numba 版本:0.57.0 NumPy 版本:1.24.3 例子 将 numpy 导入为 np 从 numba 导入 njit @njit def matmul_transpose(a: np.ndarray, b: np.nda...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.