精华内容
下载资源
问答
  • 这是程序算的结果: B[0,0]=10 B[0,1]=11 B[0,2]=10 B[1,0]=10 B[1,1]=17 B[1,2]=16 B[2,0]=16 B[2,1]=11 B[2,2]=17 ...现在要在程序界面的listview上显示出来计算的结果, 这改如何做呢大神。
  • MIT线性代数笔记 矩阵的乘法和逆矩阵

    千次阅读 多人点赞 2019-03-22 15:28:02
    矩阵乘法 Matrix multiplication   我们通过四种方法讨论如何使矩阵 A 与 B 相乘得到矩阵 C。 其中 A 为mn(m n 矩阵,而 B...  矩阵乘法的标准计算方法是通过矩阵 A 第 i 向量和矩阵 B 第 j ...

    矩阵乘法 Matrix multiplication

      我们通过四种方法讨论如何使矩阵 AB 相乘得到矩阵 C。 其中 A 为mn(m行 n 列)矩阵,而 B 为 np 矩阵,则 C 为 m*p 矩阵,记 cijc_{ij} 为矩阵 C 中第 i 行第 j列的元素。

    1.1 标准方法(行乘以列)

      矩阵乘法的标准计算方法是通过矩阵 A 第 i 行的行向量和矩阵 B 第 j 列的列向量点积得到 cijc_{ij}
    cij=k=1Naikbkj c_{ij}=\sum_{k=1}^{N}a_{ik}*b_{kj}

    展开全文
  • 我们知道如果以邻接矩阵的形式(元素为0/1、true/false,只表示...如果不使用高级的 python 第方的库(如 numpy),而仅使用 list,使用 list of lists 来表示邻接矩阵,该如何计算行和、和(也即出度、入度)呢?

    我们知道如果以邻接矩阵的形式(元素为0/1、true/false,只表示关联与否)表示图结构的话,邻接矩阵的行和表示每一个顶点的出度,邻接矩阵的列和表示每一个顶点的入度。

    如果不使用高级的 python 第三方的库(如 numpy),而仅使用 list,使用 list of lists 来表示邻接矩阵,该如何计算行和、列和(也即出度、入度)呢?

    from random import randrange
    n = 10
    N = [[randrange(2) for _ in range(n)] for _ in range(n)]
                                            # 随机 0-1 值构成的随机图
    out_degrees = [0]*n
    in_degrees = [0]*10
    
    for i in range(n):
        out_degrees[i] = sum(N[i])
    
    for j in range(n):
        for i in range(n):
            in_degrees[j] += N[i][j]
                                        # 注意入度的循环顺序,
                                        # 固定列,遍历行                           

    补充

    充分发挥 Python 的语法特性,也即 list comprehension,这里提供一个更为简便的版本:

    out_degrees = [sum(N[i]) for i in range(n)]
    in_degrees = [sum([N[i][j] for i in range(n)]) for j in range(n)]
    展开全文
  • 矩阵协方差如何计算? [参考]http://en.wikipedia.org/wiki/Covariance_matrix 看图最容易理解, 其实算的是每两列的协方差. 例如 x[2,3] 这个位置计算的是: 第二和第三列的协方差. Definition[edit] ...
    矩阵协方差如何计算?

    [参考]

    看图最容易理解, 其实算的是每两列的协方差.
    例如 x[2,3] 这个位置计算的是: 第二行和第三列的协方差.

    Definition[edit]

    Throughout this article, boldfaced unsubscripted X and Y are used to refer to random vectors, and unboldfaced subscripted Xi and Yi are used to refer to random scalars.

    If the entries in the column vector

    \mathbf{X} = \begin{bmatrix}X_1 \\ \vdots \\ X_n \end{bmatrix}

    are random variables, each with finite variance, then the covariance matrix Σ is the matrix whose (ij) entry is the covariance

    \Sigma_{ij} = \mathrm{cov}(X_i, X_j) = \mathrm{E}\begin{bmatrix} (X_i - \mu_i)(X_j - \mu_j) \end{bmatrix}

    where

    \mu_i = \mathrm{E}(X_i)\,

    is the expected value of the ith entry in the vector X. In other words,

    \Sigma = \begin{bmatrix}  \mathrm{E}[(X_1 - \mu_1)(X_1 - \mu_1)] & \mathrm{E}[(X_1 - \mu_1)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_1 - \mu_1)(X_n - \mu_n)] \\ \\  \mathrm{E}[(X_2 - \mu_2)(X_1 - \mu_1)] & \mathrm{E}[(X_2 - \mu_2)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_2 - \mu_2)(X_n - \mu_n)] \\ \\  \vdots & \vdots & \ddots & \vdots \\ \\  \mathrm{E}[(X_n - \mu_n)(X_1 - \mu_1)] & \mathrm{E}[(X_n - \mu_n)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_n - \mu_n)(X_n - \mu_n)] \end{bmatrix}.

    下面使用R来进行验证.
    使用rpois产生一些离散值, 使用array产生一个矩阵.
    > x=array(rpois(25,lambda=10), dim=c(5,5))
    > x
         [,1] [,2] [,3] [,4] [,5]
    [1,]    6   10   12    8    8
    [2,]   10    9   10   12   10
    [3,]   10    5    8    8    7
    [4,]   13    7   12    9    8
    [5,]   14    4   11    7   12

    计算这个矩阵的协方差
    > y=cov(x)
    > y
          [,1]  [,2]  [,3]  [,4]  [,5]
    [1,]  9.80 -6.00  0.05 -0.85  3.25
    [2,] -6.00  6.50  1.75  2.75 -1.50
    [3,]  0.05  1.75  2.80 -0.35  0.75
    [4,] -0.85  2.75 -0.35  3.70  0.00
    [5,]  3.25 -1.50  0.75  0.00  4.00

    y[1,1]是算的第一列和第一列的协方差.
    > y[1,1]
    [1] 9.8

    使用cov(vector,vector)函数验证一下. 如下 :
    > x[,1]
    [1]  6 10 10 13 14
    > cov(x[,1], x[,1])
    [1] 9.8

    y[1,2]和y[2,1]是一样的, 计算的是第一列和第二列的协方差. 验证如下 : 
    > cov(x[,1], x[,2])
    [1] -6
    > cov(x[,2], x[,1])
    [1] -6

    以此类推.

    那么问题来了, 如果输入的数组行列数不一样的话, 例如5行7列, 或者7行5列会怎么样呢?
    下面来测试一下 : 

    > x=array(rpois(35,lambda=10), dim=c(5,7))
    > x
         [,1] [,2] [,3] [,4] [,5] [,6] [,7]
    [1,]    9   12   12   11    7   14   12
    [2,]   11    8    8   11   14    8    7
    [3,]   12    9    9    5   13    6    9
    [4,]    9    7   12   11    9   14   10
    [5,]    6   13   11    8   11    9   14

    因为即使矩阵协方差时, 计算的是列和列的关系, 所以只和列有关, 因此以上数组虽然是5行7列的, 但是计算结果是7行7列.
    如下 : 

    > y=cov(x)
    > y
          [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]
    [1,]  5.30 -3.90 -2.70 -1.35  3.10 -3.35 -5.45
    [2,] -3.90  6.70  1.60 -1.20 -2.55  0.30  5.85
    [3,] -2.70  1.60  3.30  1.65 -4.90  5.65  3.55
    [4,] -1.35 -1.20  1.65  7.20 -3.45  7.20 -0.60
    [5,]  3.10 -2.55 -4.90 -3.45  8.20 -9.45 -4.65
    [6,] -3.35  0.30  5.65  7.20 -9.45 13.20  3.40
    [7,] -5.45  5.85  3.55 -0.60 -4.65  3.40  7.30

    其中y[7,6]指第七列和第六列的协方差. 验证如下 : 
    > y[7,6]
    [1] 3.4
    > cov(x[,7], x[,6])
    [1] 3.4
    > x[,7]
    [1] 12  7  9 10 14
    > x[,6]
    [1] 14  8  6 14  9

    对于行比列多的输入也无妨, 计算结果都只和列有关.
    > x=array(rpois(35,lambda=10), dim=c(7,5))
    > x
         [,1] [,2] [,3] [,4] [,5]
    [1,]    6   11    8   10    5
    [2,]    7    9   12   11    9
    [3,]   12   15   11   11   10
    [4,]   12    7   10   14   11
    [5,]   14   14   18   11   10
    [6,]   16   13   14    8   13
    [7,]   14   11   12    9   10
    > cov(x)
              [,1]       [,2]      [,3]       [,4]       [,5]
    [1,] 13.952381  4.2142857  7.404762 -1.8809524  7.6904762
    [2,]  4.214286  7.9523810  4.261905 -2.7857143  0.8095238
    [3,]  7.404762  4.2619048 10.142857 -1.2619048  4.0476190
    [4,] -1.880952 -2.7857143 -1.261905  3.6190476 -0.3095238
    [5,]  7.690476  0.8095238  4.047619 -0.3095238  5.9047619
    > cov(x[,5], x[,4])
    [1] -0.3095238


    其实, 我们就把每列想象成一组采样数据好了.
    例如第一列是每天的下载量, 第二列是每天的收入, 第三列是每天的点击率, 等等.
    计算他们的相关度, 和以上计算方法很相似.

    > cor(x[,5], x[,4])
    [1] -0.06695696
    > y= cor(x)
    > y
               [,1]       [,2]       [,3]        [,4]        [,5]
    [1,]  1.0000000  0.4000840  0.6224533 -0.26470155  0.84728179
    [2,]  0.4000840  1.0000000  0.4745424 -0.51926713  0.11813534
    [3,]  0.6224533  0.4745424  1.0000000 -0.20828082  0.52301998
    [4,] -0.2647016 -0.5192671 -0.2082808  1.00000000 -0.06695696
    [5,]  0.8472818  0.1181353  0.5230200 -0.06695696  1.00000000

    我们注意到对角线是1, 因为对角线的位置刚好是自己和自己的相关度, 必然是1.
    例如y[1,1], 指第一列和第一列的相关度, y[2,2],  指第2列和第2列的相关度. 当然都是1.

    [其他]
    Covariance matrix 矩阵协方差计算方法 - 德哥@Digoal - PostgreSQL research
     
    展开全文
  • 数组与矩阵函数操作

    2019-02-16 20:29:19
    矩阵的运算斯特拉森算法计算2*2矩阵的乘法(不稳定,占内存大,不推荐)Coppersimith 和 Windograd 算法两个矩阵的Hadamard积两个矩阵的Kronecker积高斯消元法求逆矩阵上三角矩阵与严格上三角矩阵对称矩阵如何用给定...

    斯特拉森算法计算2*2矩阵的乘法

    (For ACMer : 道路千万条,别走这一条)

    优点 :七次乘法和十八次加法完成运算
    基于递归分治策略
    缺点 :不稳定,占内存大

    逻辑实现
    p1 = (a11 + a22)(b11 + b22)
    p2 = (a21 + a22) * b11
    p3 = a11 * (b12 - b22)
    p4 = a22 * (b21 - b11)
    p5 = (a11 + a12) * b22
    p6 = (a21 - a11) * (b11 + b22)
    p7 = (a12 - a22) * (b21 + b22)
    c11 = p1 + p4 - p5 +p7
    c12 = p3 + p5
    c21 = p2 + p4
    c22 = p1 + p3 - p2 + p6

    函数实现
    void  strassen()
    {
        int p1 = (a[0][0] + a[0][1]) * (b[0][1] + b[1][0]);
        int p2 = (a[1][0] + a[1][1]) * b[0][0];
        int p3 = (b[0][1] - b[1][1]) * a[0][0];
        int p4 = (b[1][0] - b[0][0]) * a[1][1];
        int p5 = (a[0][0] - a[0][1]) * b[1][1];
        int p6 = (a[1][0] - a[1][1]) * (b[0][0] + b[0][1]);
        int p7 = (a[0][1] - a[1][1]) * (b[1][0] + b[1][1]);
        int c11 = p1 + p4 - p5 + p7;
        int c12 = p3 + p5;
        int c21 = p2 + p5;
        int c22 = p1 + p3 - p2 + p6;
        printf("%d %d %d %d\n",c11,c12,c21,c22);
    }
    

    来自百度百科的解释 :Strassen 算法

    Coppersimith - Windograd 算法

    看起来些许高深,其实不算太难。

    参考 Coppersimith - Windograd 算法
    或参考Coppersimith – Windograd 算法

    两个矩阵的Kronecker积

    推荐 矩阵的快速算法

    函数实现
    int product ()
    {
        int i, j, k, l, alpha,beta;
        int kmr = ar * br;
        int kmc = ac * bc;
        for(i = 0; i < ar ; i++)
            for( k = 0; k < br; k++)
            for(l = 0; i < bc; l++)
        {
            
            alpha = br * (i - 1) + k + br;
            beta = bc * (j - 1) + l + bc;
            c[alpha][beta] = a[i][j] * b[k][l];
        }
        for(i = 0; i < kmr; i++)
        {
            for(j = 0; j < kmc; j++)
                printf("%d",c[i][j]);
            printf("\n");
        }
    }
    

    高斯消元法求逆矩阵

    void inverse(float mat[][10],int r, int c)
    {
        float b[10][10],ratio,a[10][10];
        int i, j, k;
        if(r == c)
        {
            clrscr();
            for(i = 0; i < r; i++)
                for(j = 0; j < c; j++)
            {
                
                a[i][j] = mat[i][j];
                b[i][j] = 0;
            }
            b[i][i] = 1;
                }
                for(k = 0; k < r; k++)
                {
                    for(i = 0; i < c; i++)
                    {
                        if(i == k)
                            continue;
                        else 
                        {
                            ratio = a[i][k] / a[k][k];
                            for(j = 0; j < c; j++)
                            {
                                a[i][j] -= ratio * a[k][j];
                                b[i][j] -= ratio * b[k][j];
                            }
                        }
                    }
                }
                for(i = 0; i < r; i++)
                {
                    for(j = 0; j < c; j++)
                     b[i][j] /= a[i][i];
                }
                for(i = 0; i < c; i++)
                {
                    for(j = 0; j < c; j++)
                    printf("%f\t",b[i][j]);
                    printf("\n");
                }
    } 
    clrscr();  如编译器不通过可换为system("cls")
    

    3*3上三角矩阵与严格上三角矩阵

    上三角矩阵
    void triu(int m[][3], int rows, int cols )
    {
        int i = 0;
        int j = 0;
        for(; i < rows; i++)
        {
            for( j = 0 ; j < cols ; j++)
            {
                if(j < i)
                    printf("0 ");
                else
                    printf("%d ",m[i][j]);
            }
            printf("\n");
        }
    }
    严格上三角矩阵(将条件j<i改为 <=)
    #include<stdio.h>
    void triu(int m[][3], int rows, int cols )
    {
        int i = 0;
        int j = 0;
        for(; i < rows; i++)
        {
            for( j = 0 ; j < cols ; j++)
            {
                if(j <= i)
                    printf("0 ");
                else
                    printf("%d ",m[i][j]);
            }
            printf("\n");
        }
    }
    

    如何用给定行和列构造Toeplitz矩阵

    void Toeplitz(int rows[10],int cols[10], int r, int c)
    {
        for(i = 0; i < r; i++)
            for(j = 0; j < c; j++)
        {
            if(i-j>=0)
            T[i][j] = cols[i-j+1];
            if(j-i>0)
                T[i][j] = rows[j-i+1];
        }
        for(i = 0; i < r; i++)
        {
            for(j = 0; j < c; j++)
            printf("%d ",t[i][j]);
            printf("\n");
        }
    }
    
    展开全文
  • 对于多分类问题,首先,对于每一个类的精准率(Precision)和召回率(Recall),定义和二分类问题一致,但是计算上不再需要TP,FP,FN等量了:)比如对A, B, C类有如下混淆矩阵:ABCA1012B2113C538表示真值;表示预测...
  • 解9*9数独的思路:(1)一个单元格的推理:根据、小矩阵得出该单元格有可能填入的数值的个列表;求并集,缩小范围,简单的题目好多单元格都能得到唯一值。(2)重复上面这个过程2.实现:(1)复制生成个新数独...
  • MATLAB提取/替换矩阵的特定范围

    千次阅读 2018-04-09 09:10:26
    之前我在matlab里面跑程序的时候遇到过 变量会随迭代次数改变,请预分配内存以提高计算速度 的...例如:对一个5X8的矩阵A,假如我要用一个3X3的矩阵B替换A中第二三列到第四第五列的元素。那么,可以写为...
  • 问题是这样的 IDE:visual c++ 2013 community excel:2010 ...比如要得到这个数组第三行第一的数据要怎么做?要得到这个数组的数据的加和要怎么做? 有可能输出为数组吗? 新手菜鸟求大神指点。
  • 1.问题描述  在使用matlab编程时,有时需要用像C语言中数组一类的数据类型来存储数据。就一维数组而言,它相当于矩阵的一或者...而我们一般都是采用矩阵计算系统输出与输入的关系,若要用简单绘图命令plot来绘制此
  • 3.10 矩阵和线性代数的计算 101 3.11 随机选择 103 3.12 时间换算 105 3.13 计算上周5的日期 107 3.14 找出当月的日期范围 108 3.15 将字符串转换为日期 110 3.16 处理涉及到时区的日期问题 112 第4章 迭代器和生成...
  • 所谓魔方阵是指这样的方阵(方阵的阶数应为奇数),它的每一、每一和对角线之和均相等。 36 7.8找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该上最小。也可能没有鞍点。 38 7.9有15个数按从小...
  • 刚才分析的是二分类问题,那么对于多分类问题,混淆矩阵表示的含义也基本相同,这里我们以类问题为例,看看如何根据混淆矩阵计算各指标值。 多分类混淆矩阵 与二分类混淆矩阵一样,矩阵行数据相加是真实值类别数...
  • /** 计算高程坐标(Col0, Row0),(Col1, Row1) */ int col0 = int(CameraX); int row0 = int(CameraZ); unsigned int col1 = col0 + 1; unsigned int row1 = row0 + 1; /** 确保单元坐标不超过高程以外 */ if...
  • 先访问还是先访问? 多通道的Mat类矩阵是一个类似于维的数据,而计算机的存储空间是一个二维空间,因此Mat类矩阵在计算机存储时是将维数据变成二维数据,先存储第一个元素每个通道的数据,之后再存储第二个...
  • Floyd算法原理是生成邻接矩阵计算起点通过第节点到达其他任意节点的路径长度,并与之前的进行比较。具体算法原理可参考其他博客,本文主要解决路径生成问题。 如下代码,Matrix为邻接矩阵,每一个元素的值为...
  • excel的使用

    2012-11-25 17:06:01
    图107、矩阵计算Excel的强大计算功能,不但能够进行简单的四则运算,也可以进行数组、矩阵计算。(1)数组和矩阵的定义矩阵不是一个数,而是一个数组。在Excel里,数组占用一片单元域,单元域用大括号表示,例如{...
  • mu = np.mean(X_norm,0) # 求每一的平均值(0指定为,1代表) sigma = np.std(X_norm,0) # 求每一的标准差 for i in range(X.shape[1]): # 遍历 X_norm[:,i] = (X_norm[:,i]-mu[i])/sigma[i] # 归一化...
  • 考虑如何求出n维向量{o,1,12…}的线性递推式。假设考虑在模p意义下随机 个n维列向量ν,转而计算{toν,t1v,l2v…}这个标量序列的最短线性递推式。 由 Schwartz-zippel引理(可参见参考文献[5]),我们可以推出有...
  • 智能扫地机VHDL FPGA

    2012-07-12 19:02:40
    能够输出点阵板所需的扫描以及扫描信号。以及动画播放控制信号。 5.动画播放模块: 当动画播放信号sweep_rubbish来临时,通过该模块播放动画。“扫垃圾(笑脸)” 6.温度及湿度设置模块: 当状态机处在...
  • % 如果经过你的控制代码的运算,返回了指令1,则将意味着生物甲下一步会向上移动至第三行三列的位置 % 如果返回指令2,3,4.生物甲也将按上图箭头指示方向做相应的移动. % % 但您的代码给出指令3,并不是一个...
  • MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。...
  • 实例105 输出二维数组任一任一值 实例106 使用指针查找数列中的最大值和最小值 实例107 用指针数组构造字符串数组 实例108 将若干字符串按照字母顺序输出 实例109 用指向函数的指针比较大小 实例110 用...
  • 实例105 输出二维数组任一任一值 实例106 使用指针查找数列中的最大值和最小值 实例107 用指针数组构造字符串数组 实例108 将若干字符串按照字母顺序输出 实例109 用指向函数的指针比较大小 实例110 用...
  • 数据结构演示软件

    2013-06-02 21:32:36
    2. 算法演示执行状态下的屏幕分为部分:第一行为“标题”,第二行为“菜单命令”,以下为算法演示屏上各菜单的说明。 菜单命令中各项自左至右的功能分别为:  数据——设置算法演示的数据(数据结构)。 ...
  • 5.3.1 从矩阵窗口建立维图形 5.3.2 通过数据转换建立维图形 5.3.3 维图形设置 5.3.4 维图形旋转 5.4 维图形类型介绍 5.4.1 3D XYY Graph 5.4.2 3D XYZ Graph 5.4.3 等高线图 5.4.4 3D Surface 5.4.5 Image...
  • 2. 算法演示执行状态下的屏幕分为部分:第一行为“标题”,第二行为“菜单命令”,以下为算法演示屏上各菜单的说明。 菜单命令中各项自左至右的功能分别为:  数据——设置算法演示的数据(数据结构)。 ...
  • 第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型...7.6 我使用fgets将文件的所有读入一个数组,为什么读入的每一都是...
  • 面试题20:顺时针打印矩阵:首先需要判断每一步开始是的坐标点是否满足小于行数的一半且小于数的一半,在最后一圈中,可能出现仅能向右走一,仅能向右走一向下走一,向右走一向下走一向左走一,能走...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

如何计算三行三列矩阵