The outer product of the arrays, 矩阵外积, or 矩阵特定外函数

矩阵外积使用%o%运算符计算.

得到结果为维度相加的数组.

例如 : 

一个2维矩阵和一个3维数组计算外积, 将得到一个5维数组.

> x <- matrix(1:10, 2, 5)
> y <- array(1:64, dim=c(4,4,4))
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10
> y
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16

, , 2

     [,1] [,2] [,3] [,4]
[1,]   17   21   25   29
[2,]   18   22   26   30
[3,]   19   23   27   31
[4,]   20   24   28   32

, , 3

     [,1] [,2] [,3] [,4]
[1,]   33   37   41   45
[2,]   34   38   42   46
[3,]   35   39   43   47
[4,]   36   40   44   48

, , 4

     [,1] [,2] [,3] [,4]
[1,]   49   53   57   61
[2,]   50   54   58   62
[3,]   51   55   59   63
[4,]   52   56   60   64

计算外积 : 

> x %o% y
, , 1, 1, 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

, , 2, 1, 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    2    6   10   14   18
[2,]    4    8   12   16   20
....

结果略.

外积计算结果的维度和类型 : 

> dim(x %o% y)
[1] 2 5 4 4 4
> class(x %o% y)
[1] "array"

我们看到一个(2,5)的矩阵和一个(4,4,4)的数组计算外积得到了一个(2,5,4,4,4)的数组.

下面来看一下外积是怎么计算的, 使用小一点的矩阵.

> x <- matrix(1:4, 2, 2)
> y <- matrix(10:13, 1, 4)
> x
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> y
     [,1] [,2] [,3] [,4]
[1,]   10   11   12   13

使用x %o% y计算外积, 相当于y的每个元素和x相乘.

> x %o% y
y的第1个元素(1,1)乘以x
, , 1, 1

     [,1] [,2]
[1,]   10   30
[2,]   20   40
y的第2个元素(1,2)乘以x
, , 1, 2

     [,1] [,2]
[1,]   11   33
[2,]   22   44
y的第3个元素(1,3)乘以x
, , 1, 3

     [,1] [,2]
[1,]   12   36
[2,]   24   48
y的第4个元素(1,4)乘以x
, , 1, 4

     [,1] [,2]
[1,]   13   39
[2,]   26   52

反过来写 y %o% x

x的第1个元素(1,1)乘以y
> y %o% x
, , 1, 1

     [,1] [,2] [,3] [,4]
[1,]   10   11   12   13
x的第2个元素(2,1)乘以y
, , 2, 1

     [,1] [,2] [,3] [,4]
[1,]   20   22   24   26
x的第3个元素(1,2)乘以y
, , 1, 2

     [,1] [,2] [,3] [,4]
[1,]   30   33   36   39
x的第4个元素(2,2)乘以y
, , 2, 2

     [,1] [,2] [,3] [,4]
[1,]   40   44   48   52

%o%实际是outer函数的一种特殊用法. 即FUN为乘法.

     outer(X, Y, FUN = "*", ...)
     X %o% Y

例如

> outer(y,x,FUN="*")
, , 1, 1

     [,1] [,2] [,3] [,4]
[1,]   10   11   12   13

, , 2, 1

     [,1] [,2] [,3] [,4]
[1,]   20   22   24   26

, , 1, 2

     [,1] [,2] [,3] [,4]
[1,]   30   33   36   39

, , 2, 2

     [,1] [,2] [,3] [,4]
[1,]   40   44   48   52

如果我们把FUN换成加法, 结果如下 : 

> outer(y,x,FUN="+")
, , 1, 1

     [,1] [,2] [,3] [,4]
[1,]   11   12   13   14

, , 2, 1

     [,1] [,2] [,3] [,4]
[1,]   12   13   14   15

, , 1, 2

     [,1] [,2] [,3] [,4]
[1,]   13   14   15   16

, , 2, 2

     [,1] [,2] [,3] [,4]
[1,]   14   15   16   17

FUN还可以使用自定义函数, 以及函数支持传入参数等.

[参考]
1. help(outer)
2. help("%o%")

时间: 2024-10-30 21:19:44

The outer product of the arrays, 矩阵外积, or 矩阵特定外函数的相关文章

dlt-基础矩阵(F矩阵)和投影矩阵把我弄混了

问题描述 基础矩阵(F矩阵)和投影矩阵把我弄混了 我一直看的是根据两组二维坐标求基础矩阵(也就是F矩阵),可是今天看了一个源码,是根据一组二维坐标和一组三维坐标求投影矩阵(好像叫DLT标定法).那到底是应该先求投影矩阵再根据投影矩阵求内参,外参,还是先求基础矩阵,再根据基础矩阵求投影矩阵?

[经典面试题]蛇形矩阵(螺旋矩阵)

[1.打印蛇形矩阵] Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. [代码] /**----

矩阵 排序-计算矩阵中d(i)的值,d为矩阵中所有点值的一个排序

问题描述 计算矩阵中d(i)的值,d为矩阵中所有点值的一个排序 解决方案 图太小,什么也看不见.无非就是二维数组循环,自己写下不难的.

3d矩阵-使用3D矩阵将矩形图形变成不规则4边形

问题描述 使用3D矩阵将矩形图形变成不规则4边形 float m11, m12, m13, m14; float m21, m22, m23, m24; float m31, m32, m33, m34; float m41, m42, m43, m44; 请不要直接贴代码, 我想要了解计算的原理或推导过程 因为网上大部分资料都是比较零散, 没提到是如何运算的 关于矩阵中的第4列属性 我只知道m34是控制透视投影的, 还有m44是齐次坐标的基 至于m14,m24的含义就找不到资料了,有没有哪位大

由矩阵等式求矩阵

设 $\dps{A=\sex{\ba{cccc} 1&2&&\\ 1&3&&\\ &&0&2\\ &&-1&0 \ea}}$, 且 $\dps{\sez{\sex{\frac{1}{2}A}^*}^{-1}BA=6AB+12E}$. 求 $B$. 解答: (1) 先给出几个性质: $$\beex \bea \det\sex{\ba{cc} X&\\ &Y \ea} &=\det X\cd

矩阵Kronecker(克罗内克)积

Kronecker(克罗内克)积 如果A是一个 m × n 的矩阵,而B是一个 p × q 的矩阵,克罗内克积A × B则是一个 mp × nq 的分块矩阵.       在R中使用kronecker来计算两个矩阵的克罗内克积. 例如 > x <- matrix(1:10,2,5) > x [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 > kronecker(x,x) [,1] [,2] [,3] [,4] [,5]

矩阵相乘

在R中矩阵相乘使用%*%运算符号. 矩阵相乘必须满足 : 左边的矩阵列数和右边的矩阵行数相等.  例如m行,n列的矩阵和n行p列的矩阵可以相乘, 并且得到的是m行,p列的矩阵. 那么结果矩阵上的每个点的数据是怎么计算来的呢? 例如 :  [2,3]  即第二行第三列这个点. 计算方法 : 左边矩阵的第2行和右边矩阵的第3列的每个元素相乘, 然后把所有乘积相加的结果, 例子 :  > x <- matrix(data = c(1:6), nrow = 2, ncol = 3, byrow = T

学习笔记DL004:标量、向量、矩阵、张量,矩阵、向量相乘,单位矩阵、逆矩阵

线性代数,面向连续数学,非离散数学.<The Matrix Cookbook>,Petersen and Pedersen,2006.Shilov(1977). 标量.向量.矩阵.张量. 标量(scalar).一个标量,一个单独的数.其他大部分对象是多个数的数组.斜体表示标量.小写变量名称.明确标量数类型.实数标量,令s∊ℝ表示一条线斜率.自然数标量,令n∊ℕ表示元素数目. 向量(vector).一个向量,一列数.有序排列.次序索引,确定每个单独的数.粗体小写变量名称.向量元素带脚标斜体表示.

矩阵-c++技术帮,给个程序的思路

问题描述 c++技术帮,给个程序的思路 编写一个实现n维向量各种操作的类(Vector),功能包括: 1. 构造函数实现n维向量的初始化构造,这里n可变: 2. 析构函数实现向量动态内存的释放: 3. 拷贝构造函数和移动拷贝构造函数实现向量的拷贝构造: 4. 重载赋值运算符('=')和移动赋值运算符,实现两个向量之间的赋值: 5. 编写成员函数求两个向量的内积: 6. 编写成员函数求两个向量的外积: 7. 编写成员函数求两个向量的和: 8. 编写成员函数求两个向量的差: 9. 编写成员函数实现向