标签: matrix-multiplication

仅计算R中矩阵乘法的对角线

我只需要矩阵乘法中的对角线元素:

在此输入图像描述,

在R.由于Z很大,我想避免全面的乘法......

Z <- matrix(c(1,1,1,2,3,4), ncol = 2)
Z
#     [,1] [,2]
#[1,]    1    2
#[2,]    1    3
#[3,]    1    4

X <- matrix(c(10,-5,-5,20), ncol = 2)
X
#     [,1] [,2]
#[1,]   10   -5
#[2,]   -5   20

Z %*% D %*% t(Z)
#     [,1] [,2] [,3]
#[1,]   70  105  140
#[2,]  105  160  215
#[3,]  140  215  290

diag(Z %*% D %*% t(Z))
#[1]  70 160 290
Run Code Online (Sandbox Code Playgroud)

X始终是一个小方阵(2x2,3x3或4x4),其中Z的列数等于X的维数.是否有可用的函数?

r matrix matrix-multiplication

14
推荐指数
1
解决办法
1869
查看次数

如何用RGB通道完成卷积?

假设我们有一个单一频道图像(5x5)

A = [ 1 2 3 4 5
      6 7 8 9 2
      1 4 5 6 3
      4 5 6 7 4
      3 4 5 6 2 ]
Run Code Online (Sandbox Code Playgroud)

和过滤器K(2x2)

K = [ 1 1
      1 1 ]
Run Code Online (Sandbox Code Playgroud)

应用卷积的一个例子(让我们从A中取出第一个2x2)将是

1*1 + 2*1 + 6*1 + 7*1 = 16
Run Code Online (Sandbox Code Playgroud)

这非常简单.但是,让我们向矩阵A引入深度因子,即在深度网络中具有3个通道或甚至转换层的RGB图像(深度= 512).如何使用相同的滤波器完成卷积运算?类似的工作对于RGB情况非常有帮助.

rgb convolution matrix-multiplication dot-product

14
推荐指数
3
解决办法
1万
查看次数

为什么我的Strassen的矩阵乘法变慢了?

我用C++写了两个矩阵乘法程序:常规MM (源)和Strassen的MM (源),它们都在大小为2 ^ kx 2 ^ k的矩形矩阵上运算(换句话说,是偶数大小的方阵).

结果很可怕.对于1024 x 1024矩阵,常规MM需要46.381 sec,而Strassen的MM需要1484.303 sec(25 minutes!!!!).

我试图让代码尽可能简单.在网上找到的其他Strassen的MM示例与我的代码没有太大的不同.Strassen代码的一个问题显而易见 - 我没有切换点,切换到常规MM.

我的Strassen的MM代码有哪些其他问题?

谢谢 !

直接链接到源
http://pastebin.com/HqHtFpq9
http://pastebin.com/USRQ5tuy

EDIT1.拳头,很多很棒的建议.感谢您抽出宝贵时间和分享知识.

我实施了更改(保留了我的所有代码),添加了截止点.具有截止512的2048x2048矩阵的MM已经给出了良好的结果.常规MM:191.49s Strassen的MM:112.179s显着改善.使用英特尔迅驰处理器,使用Visual Studio 2012,在史前联想X61 TabletPC上获得了结果.我将进行更多检查(以确保我得到正确的结果),并将发布结果.

c++ optimization performance matrix-multiplication strassen

13
推荐指数
1
解决办法
3654
查看次数

在python中加速逐元素的数组乘法

我一直在玩numba和numexpr试图加速一个简单的元素矩阵乘法.我无法获得更好的结果,它们基本上(速度方向)等同于numpys乘法函数.这个地区有人有运气吗?我使用numba和numexpr是错误的(我对此很新)或者这是一个不好的方法来尝试加快速度.这是一个可重现的代码,谢谢你的高级:

import numpy as np
from numba import autojit
import numexpr as ne

a=np.random.rand(10,5000000)

# numpy
multiplication1 = np.multiply(a,a)

# numba
def multiplix(X,Y):
    M = X.shape[0]
    N = X.shape[1]
    D = np.empty((M, N), dtype=np.float)
    for i in range(M):
        for j in range(N):
            D[i,j] = X[i, j] * Y[i, j]
    return D

mul = autojit(multiplix)
multiplication2 = mul(a,a)

# numexpr
def numexprmult(X,Y):
    M = X.shape[0]
    N = X.shape[1]
    return ne.evaluate("X * Y")

multiplication3 = numexprmult(a,a) 
Run Code Online (Sandbox Code Playgroud)

performance numpy matrix-multiplication python-2.7 numba

13
推荐指数
2
解决办法
5842
查看次数

OpenMP C++矩阵乘法并行运行较慢

我正在学习使用OpenMP执行for循环的paralel的基础知识.

可悲的是,我的paralel程序运行速度比串行版慢10倍.我究竟做错了什么?我错过了一些障碍吗?

double **basicMultiply(double **A, double **B, int size) {
   int i, j, k;
   double **res = createMatrix(size);
   omp_set_num_threads(4);
   #pragma omp parallel for private(k)
   for (i = 0; i < size; i++) {
      for (j = 0; j < size; j++) {
         for (k = 0; k < size; k++) {
            res[i][j] += A[i][k] * B[k][j];
         }
      }
   }
   return res;
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你!

c++ openmp matrix-multiplication

13
推荐指数
2
解决办法
2万
查看次数

什么是最好的矩阵乘法算法?

什么是最好的矩阵乘法算法?什么对我来说意味着什么?它意味着最快,为今天的机器做好准备.

如果可以,请提供伪代码链接.

algorithm math matrix matrix-multiplication

12
推荐指数
4
解决办法
2万
查看次数

通过SSE加速矩阵乘法(C++)

我需要每秒运行240000次矩阵向量乘法.矩阵是5x5并且始终相同,而向量在每次迭代时都会发生变化.数据类型是float.我正在考虑使用一些SSE(或类似)指令.

1)我担心算术运算的数量与所涉及的存储器操作的数量相比太小.你认为我可以获得一些有形的(例如> 20%)改善吗?

2)我需要英特尔编译器吗?

3)你能指出一些参考文献吗?

谢谢大家!

c++ sse matrix-multiplication

12
推荐指数
2
解决办法
9285
查看次数

为什么天真的C++矩阵乘法比BLAS慢100倍?

我正在研究大型矩阵乘法并运行以下实验来形成基线测试:

  1. 从std normal(0 mean,1 stddev)随机生成两个4096x4096矩阵X,Y.
  2. Z = X*Y.
  3. Z的Sum元素(以确保它们被访问)和输出.

这是天真的C++实现:

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    constexpr size_t dim = 4096;

    float* x = new float[dim*dim];
    float* y = new float[dim*dim];
    float* z = new float[dim*dim];

    random_device rd;
    mt19937 gen(rd());
    normal_distribution<float> dist(0, 1);

    for (size_t i = 0; i < dim*dim; i++)
    {
        x[i] = dist(gen);
        y[i] = dist(gen);
    }

    for (size_t row = 0; row < dim; row++)
        for (size_t col = 0; col < …
Run Code Online (Sandbox Code Playgroud)

c++ linux matlab matrix-multiplication c++11

12
推荐指数
2
解决办法
3347
查看次数

矩阵乘法,求解Ax = b求解x

所以给了我一个需要求解三次样条系数的作业.现在我清楚地了解如何在纸上和MatLab上进行数学运算,我想用Python解决问题.给定一个方程Ax = b,我知道A和b的值,我希望能够用Python解决x,我很难找到一个好的资源去做这样的事情.

防爆.

A = |1 0 0|
    |1 4 1|
    |0 0 1|

x = Unknown 3x1 matrix

b = |0 |
    |24| 
    |0 |
Run Code Online (Sandbox Code Playgroud)

解决x

python numpy matrix-multiplication

12
推荐指数
2
解决办法
3万
查看次数

为什么我的CPU无法在HPC中保持最佳性能

我开发了一个高性能的 Cholesky分解程序,它应该在单个CPU上具有大约10.5 GFLOP的峰值性能(没有超线程).但是当我测试它的性能时,有一些我不明白的现象.在我的实验中,我通过增加矩阵维数N(从250到10000)来测量性能.

  • 在我的算法中,我已经应用了缓存(具有调整的阻塞因子),并且在计算期间总是以单位步长访问数据,因此缓存性能是最佳的; 消除了TLB和寻呼问题;
  • 我有8GB的可用RAM,实验期间的最大内存占用量低于800MB,因此没有交换;
  • 在实验过程中,没有像Web浏览器那样的资源需求过程同时运行.只有一些非常便宜的后台进程正在运行以记录CPU频率以及每2秒CPU温度数据.

对于任何NI测试,我都希望性能(在GFLOP中)应保持在10.5左右.但是,如第一张图所示,在实验中间观察到显着的性能下降.

CPU频率和CPU温度见第2和第3图.实验在400年代结束.实验开始时温度为51度,CPU忙时迅速升至72度.之后,它慢慢增长到78度的最高点.CPU频率基本稳定,温度升高时不下降.

所以,我的问题是:

  • 由于CPU频率没有下降,为什么性能会受到影响?
  • 温度究竟如何影响CPU性能?从72度到78度的增量真的会让事情变得更糟吗? 在此输入图像描述 在此输入图像描述 在此输入图像描述

CPU信息

System: Ubuntu 14.04 LTS
Laptop model: Lenovo-YOGA-3-Pro-1370
Processor: Intel Core M-5Y71 CPU @ 1.20 GHz * 2

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0,1
Off-line CPU(s) list:  2,3
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 61
Stepping:              4
CPU MHz:               1474.484
BogoMIPS:              2799.91
Virtualisation: …
Run Code Online (Sandbox Code Playgroud)

x86 hpc matrix cpu-speed matrix-multiplication

12
推荐指数
1
解决办法
4302
查看次数