标签: matrix-multiplication

Objective-C中的矩阵乘法

这些是我在项目中进行矩阵计算的一些代码.
它们是两个类方法和一个实例方法,用于创建矩阵并执行矩阵乘法运算.
matrics multiplication的方法效果不好,其结果是错误的.

+ (NSMutableArray *)arrayOfWidth:(NSInteger)width andHeight:(NSInteger)height {
    return [[self alloc] initWithWidth:width andHeight:height];
}

- (id)initWithWidth:(NSInteger)width andHeight:(NSInteger)height {
    if((self = [self initWithCapacity:height])) {
        for(int i = 0; i < height; i++) {
            NSMutableArray *inner = [[NSMutableArray alloc] initWithCapacity:width];
            [self addObject:inner];
        }
    }
    return self;
}

+ (NSMutableArray *)matrixA:(NSMutableArray *)matrixA multiplyMatrixB:(NSMutableArray *)matrixB {
    int aRow = [matrixA count];
    int aColumn = [[matrixA objectAtIndex:0] count];
    int bRow = [matrixB count];
    int bColumn = [[matrixB objectAtIndex:0] count];
    NSMutableArray *newArray = [NSMutableArray arrayOfWidth:aRow …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nsmutablearray matrix-multiplication

0
推荐指数
1
解决办法
6901
查看次数

Matlab中的功率谱(共轭矩阵乘法):获得复杂的值而不是真实的值.我的代码出了什么问题?

这是我的代码,非常简单,我无法相信它不起作用.

pckint = imread('pckint.jpg');
F = fft2(pckint);
Fcon = conj(F);
S = F*Fcon;
Run Code Online (Sandbox Code Playgroud)

现在,根据分配方向和我对主题的理解,我应该在我的功率谱'S'中获得真正的价值.但是,我正在获得复杂的价值观.

对不起,对于Matlab来说,我是一个完整的菜鸟,但我已经尝试过搜索和理解我用过的所有命令,但无济于事.请帮忙!

matlab image-processing matrix-multiplication

0
推荐指数
1
解决办法
1110
查看次数

numpy矩阵反演舍入误差

我的BinvA矩阵的(1,1)条目得到一个非常奇怪的值我
只是试图反转B矩阵并做一个(B ^ -1)A乘法.

我明白,当我手工计算时,我的(1,1)应该是0,但我得到的是1.11022302e-16.我该如何解决?我知道浮点数不能完全准确地表示,但为什么这给我这样一个不准确的响应而不是四舍五入到有没有办法让它更精确?

她是我的代码:

import numpy as np

A = np.array([[2,2],[4,-1]],np.int)
A = A.transpose()


B = np.array([[1,3],[-1,-1]],np.int)
B = B.transpose()

Binv = np.linalg.inv(B) #calculate the inverse

BinvA = np.dot(Binv,A) 
print(BinvA)
Run Code Online (Sandbox Code Playgroud)

我的打印声明:

[[  1.11022302e-16  -2.50000000e+00]
 [ -2.00000000e+00  -6.50000000e+00]]
Run Code Online (Sandbox Code Playgroud)

python floating-point numpy matrix-multiplication floating-point-precision

0
推荐指数
1
解决办法
3063
查看次数

大型矩阵运算:Scala/Apache Spark中的乘法

我需要乘以两个大矩阵,X并且Y.通常X具有~500K行和~18K列,并Y具有~18K行和~18K列.X预计矩阵是稀疏的,并且矩阵Y预计是稀疏/密集的.在Scala/Apache Spark中执行此乘法的理想方法是什么?

scala sparse-matrix large-data matrix-multiplication apache-spark

0
推荐指数
1
解决办法
6288
查看次数

FORTRAN 比 C 快 - 对于在同一处理器上运行的矩阵乘法程序,为什么?

n*n在 Xeon 处理器系统上使用 C 和 FORTRAN运行矩阵乘法代码。我很惊讶地看到两种方法之间的实时差异。为什么 FORTRAN 代码给了我更快的执行时间?我在dgemm()C 代码中使用并调用了相同的函数。我尝试运行更改循环顺序的通用 C 代码并尝试使用不同的标志来优化模拟过程。我无法达到使用dgemm().

FORTRAN 代码 - dgemm():

#include "stdio.h"
#include "time.h"
#include "sys/time.h"
#include "math.h"
#include "stdlib.h"

long long readTSC(void)
{
 /* read the time stamp counter on Intel x86 chips */
  union { long long complete; unsigned int part[2]; } ticks;
  __asm__ ("rdtsc; mov %%eax,%0;mov %%edx,%1"
        : "=mr" (ticks.part[0]),
          "=mr" (ticks.part[1])
        : /* no inputs */
        : "eax", "edx");
 return ticks.complete;
}
volatile double gtod(void) …
Run Code Online (Sandbox Code Playgroud)

c time fortran matrix matrix-multiplication

0
推荐指数
1
解决办法
1432
查看次数

在 Fortran90 中使用 LAPACK、BLAS 计算矩阵的逆

我是使用 LAPACK/BLAS 的新手。我想计算一个方程的解:

AU=F

我想知道这部分代码的逻辑错误是什么。我使用求解器输入大小为 ((xdiv-1) (ydiv-1),(xdiv-1) (ydiv-1)) 的矩阵 A。然后,随后求解方程。U=逆(A)* f。

其中 U 和 f 大小相同。(u((xdiv-1) (ydiv-1),1),f((xdiv-1) (ydiv-1),1))。执行矩阵求逆时出现分段错误错误。

这是我的代码:

program main
double precision, allocatable :: A(:,:)
double precision, allocatable :: u(:,:), f(:,:)
double precision mesh(2), dx, dy
integer  xdiv, ydiv
 xdiv=55
 ydiv=55
 mesh(1)=.001
 mesh(2)=.001
 dx=mesh(1)
 dy=mesh(2)

allocate (A((xdiv-1)*(ydiv-1),(xdiv-1)*(ydiv-1))) 
allocate (Ainv((xdiv-1)*(ydiv-1),(xdiv-1)*(ydiv-1)))
allocate (u((xdiv-1)*(ydiv-1),1),f((xdiv-1)*(ydiv-1),1))

         do i =1,(xdiv-1)*(ydiv-1)
         A(i,i)=-2.d0*(1.d0/(dx**2)+1.d0/(dy**2))
         enddo
         do i=1,(xdiv-2)
         do j=1,(ydiv-1)
         A(i+(j-1)*(xdiv-1),i+(j-1)*(xdiv-1)+1)=1.d0/(dx**2)
         A(i+(j-1)*(xdiv-1)+1,i+(j-1)*(xdiv-1))=1.d0/(dx**2)
         enddo
         enddo
         do i=1,(xdiv-1)
         do j=1,(ydiv-2)
         A(i+(j-1)*(xdiv-1),i+(j)*(xdiv-1))=1.d0/(dy**2)
         A(i+(j)*(xdiv-1),i+(j-1)*(xdiv))=1.d0/(dy**2)
         enddo
         enddo

        do i=1,(xdiv-1)
         do j=1,(ydiv-1)
       xcoord = (i-1)*mesh(1) …
Run Code Online (Sandbox Code Playgroud)

fortran blas matrix-inverse lapack matrix-multiplication

0
推荐指数
1
解决办法
6488
查看次数

一维数组中的矩阵相乘

void multiply(int a[], int row1, int col1, int b[], int row2, int col2) {
    int d[size];
    for (int i = 0; i < row1; i++) {
        for (int j = 0; j < col2; j++) {
            int sum = 0.0;
            for (int k = 0; k < col2; k++)
                sum = sum + a[i * col1 + k] * b[k * col2 + j];
            d[i * col2 + j] = sum;
        }
    }
    for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c arrays matrix matrix-multiplication

0
推荐指数
1
解决办法
6619
查看次数

快速计算斐波那契数的方法

如果我将使用以下方法计算Fibonacci数,它将比线性方法更快:

在此输入图像描述

我对吗?

方法是从这里开始的.

algorithm performance fibonacci matrix-multiplication

0
推荐指数
1
解决办法
242
查看次数

矩阵乘法和差异

我需要用MATLAB计算这个等式:

在此输入图像描述

哪里Sn可以是矩阵或标量,我试图用它

S_A = S_3*S_5*((ones-(S_1*S_5)).^(-1))*S_2+S_4
Run Code Online (Sandbox Code Playgroud)

问题是它没有给我正确的结果和它似乎与差异的问题 在此输入图像描述 但我无法理解为什么给我错误的结果.

结果应该是这个

在此输入图像描述

但是MATLAB的结果是

在此输入图像描述

我不明白为什么这两个结果不一样.我想到的唯一方法是通过这个

diff = ones-(S_1*S_5);
if S_1*S_5 == zeros         %Perchè senza non funziona?
    diff = ones;
else 
    diff = (ones-(S_1*S_5)).^(-1)
end
S_A = S_3*S_5*diff*S_2+S_4;
Run Code Online (Sandbox Code Playgroud)

但我不认为这是一个聪明的解决方案.谁知道为什么我没有得到正确的结果?

matlab matrix matrix-multiplication

0
推荐指数
1
解决办法
76
查看次数

使用向量化C ++的矩阵乘法

我正在尝试编写C ++代码以使用SIMD进行矩阵乘法,但是结果是错误的,这是我的代码

    void mat_sse(DATA m1[][SIZE], DATA m2[][SIZE], DATA mout[][SIZE])
{

    DATA prod = 0;

    __m128 X, Y, Z, M, N;

    for(int i=0; i<SIZE; i=i+1){
    Z[0] = Z[1] = Z[2] = Z[3] = 0;
    for(int k=0; k< SIZE; k=k+4){

        for( int j=0; j<SIZE; j=j+4){
            X = _mm_load_ps(&m1[i][k]);
            Y = _mm_load_ps(&m2[k][j]);
            M = _mm_mul_ps(X, Y);
            Z = _mm_add_ps(M, N);
            mout[i][j] += Z[0];
        mout[i][j+1] += Z[1];
        mout[i][j+2] += Z[2];
        mout[i][j+3] += Z[3];
        }

    }

    }

    return ;

}
Run Code Online (Sandbox Code Playgroud)

const int SIZE = 40; …

c++ sse simd matrix-multiplication

0
推荐指数
1
解决办法
75
查看次数