相关疑难解决方法(0)

为什么MATLAB在矩阵乘法中如此之快?

我正在使用CUDA,C++,C#和Java进行一些基准测试,并使用MATLAB进行验证和矩阵生成.但是当我乘以MATLAB时,2048x2048甚至更大的矩阵几乎立即成倍增加.

             1024x1024   2048x2048   4096x4096
             ---------   ---------   ---------
CUDA C (ms)      43.11      391.05     3407.99
C++ (ms)       6137.10    64369.29   551390.93
C# (ms)       10509.00   300684.00  2527250.00
Java (ms)      9149.90    92562.28   838357.94
MATLAB (ms)      75.01      423.10     3133.90
Run Code Online (Sandbox Code Playgroud)

只有CUDA具有竞争力,但我认为至少C++会有点接近并且不会60x慢.

所以我的问题是 - MATLAB如何快速地完成它?

C++代码:

float temp = 0;
timer.start();
for(int j = 0; j < rozmer; j++)
{
    for (int k = 0; k < rozmer; k++)
    {
        temp = 0;
        for (int m = 0; m < rozmer; m++)
        {
            temp …
Run Code Online (Sandbox Code Playgroud)

performance matlab cuda matrix-multiplication

184
推荐指数
7
解决办法
5万
查看次数

在Matlab中使用i和j作为变量

i并且j是非常流行的变量名称(参见例如,这个问题这个).

例如,在循环中:

for i=1:10,
    % do something...
end
Run Code Online (Sandbox Code Playgroud)

作为矩阵的索引:

mat( i, j ) = 4;
Run Code Online (Sandbox Code Playgroud)

为什么不应该他们作为在Matlab的变量名?

variables matlab naming-conventions

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

线性索引,逻辑索引以及所有这些

我们习惯于在Matlab中使用不同形式的索引:

  • 标准(使用每个维度的整数),
  • 逻辑(使用逻辑值),
  • 线性(使用单个索引遍历具有多个维度的数组).

乍一看,似乎这些形式是独占的:索引是标准的,逻辑的或线性的.然而,有时似乎在这些形式中的几种之间存在混合.例如,

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> A(A>5)
ans =
     8
     9
     6
     7
Run Code Online (Sandbox Code Playgroud)

这是合乎逻辑的索引,对吧?但它也具有线性索引的一些功能,因为返回了列向量.实际上,逻辑索引A>5与线性索引具有相同的效果find(A>5).

作为第二个例子,考虑一下

>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> A(1:2, [true false true])
ans =
     8     6
     3     7
Run Code Online (Sandbox Code Playgroud)

在此表达式中,标准(整数值)索引用于第一个坐标,逻辑索引用于第二个坐标.

这些例子(以及在实践中出现的更复杂的例子)提出了以下问题:

  • Matlab有哪些类型的索引?
  • 它们如何结合起来?
  • 他们应该如何被提及?

arrays matlab matrix matrix-indexing

33
推荐指数
1
解决办法
2620
查看次数