算法练习(12):矩阵详解(1.1.33)

综合技术 2018-06-22 阅读原文

知识点

  • 绘点
  • 随机函数

1.1.33矩阵库。编写一个Matrix库并实现以下API

题目

题目

编写一个测试用例,从标准输入读取矩阵并测试所有方法

分析

书中第一次出现矩阵的例子是代码:

int N = a.length;
double[][] c = new double[N][N];
for (int i = 0; i < N; i++)
   for (int j = 0; j < N; j++)
   { // Compute dot product of row i and column j.
      for (int k = 0; k < N; k++)
         c[i][j] += a[i][k]*b[k][j];
}

这段代码的作用是计算矩阵的乘积。那么,什么是矩阵呢?这里我们从头来了解矩阵。先看一下这个人:

阿瑟·凱萊

这个人叫阿瑟·凱萊,又译为凯利,他是矩阵(Matrix)的创始人。

使用Java实现矩阵

由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵。

由本题中提供的表格来看要表示一个矩阵只需要一个二维数组即可。

向量(Vector)

本题中除了矩阵还提到了向量,那向量又是什么,跟矩阵有何区别与联系呢?

其实我们可以把向量当作一个点(a,b)。它与矩阵的区别是:

向量可以用矩阵表示,且有时特殊矩阵就是向量。 简言之就是矩阵包含向量。

点乘(dot)

在数学中,数量积(dot product; scalar product,也称为点积、点乘)是接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。

坐标表示:已知两个非零向量$a=(x_1,y_1),b=(x_2,y_2)$,则有$a·b=x_1x_2+y_1y_2$,即两个向量的数量积等于它们对应坐标的乘积的和。

矩阵的运算

乘积

两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。乘积矩阵的行数等于左边矩阵的行数,乘积矩阵的列数等于右边矩阵的列数 。

那么,我们怎么理解矩阵的乘法呢?这里给个知乎中的答案用于参考:

矩阵乘法的本质是什么?

大概总结一下:

小明今天要做饭,消耗2斤肉,1斤蔬菜。肉每斤20元,蔬菜每斤5元,则一共需多少花费?

这个问题的答案很简单:

$20 times 2+5 times 1= 45$

我们用向量相乘的方法写出来:

$$

left[

begin{matrix}

20 & 5\

end{matrix}

right]

left[

begin{matrix}

2 \

1 \

end{matrix}

right] =

45

$$

如果小明第二天有另一种做饭的方法,需要消耗1斤肉,4斤蔬菜,那么这两种方法的花费各是多少呢?我们显然需要另算这第二种方法的花费。把这个做饭方式写在第二个矩阵(向量是宽度或长度为1的矩阵)里:

$$

left[

begin{matrix}

20 & 5\

end{matrix}

right]

left[

begin{matrix}

2 & 1\

1 & 4\

end{matrix}

right] =

left[

begin{matrix}

45 \

40 \

end{matrix}

right]

$$

以此类推,可以推导出矩阵乘法的含义。

小专栏

责编内容by:小专栏阅读原文】。感谢您的支持!

您可能感兴趣的

The power of generic algorithms In computer science, there is this tension between creating generic algorithms applicable to different situations and op...
8 Python Machine Learning Algorithms – You Must LE... 1. Objective Previously, we discussed the techniques of machine learning with Python . Going deeper, today, we will...
Probabilistic graphical models: parameter estimati... In the previous part of this probabilistic graphical models tutorial for theStatsbot team, we looked at the two types o...
CSS3 Firefox filter grayscale without blur effect ... What i have now is the following code to grayscale my image (found here on stackoverflow). Problem is this also blurres ...
Get an adjacent dot matrix in Python If in 2D, p(x,y), I'd like to have a adjacent matrix of 3*3: (x-1,y-1), (x,y-1), (x+1,y-1), ... (x-1,y+1), (x,y+1), (x...