找回密码
 注册
查看: 6707|回复: 0

R语言中数组的外积是怎么计算的

[复制链接]
发表于 2011-1-22 21:11:17 | 显示全部楼层 |阅读模式
数组一个非常重要的运算就是外积运算(outer product)。如果a 和b 是两个数
值数组,它们的外积将是这样的一个数组:维度向量通过连接两个操作数的维度向
量(顺序非常的重要)得到;数据向量则由a 的数据向量元素和b 的数据向量元素的所
有可能乘积得到。外积是通过特别的操作符%o%实现:
> ab <- a %o% b
一种备选的方案是,
> ab <- outer(a, b, "*")
命令中的乘法操作符可以被任意一个双变量函数代替。例如,我们想研究函
数f(x; y) = cos(y)=(1 + x2) 在R 在向量x 和y形成的格子平面(regular grid)上的特
征,可以按下面的步骤进行:
> f <- function(x, y) cos(y)/(1 + x^2)
> z <- outer(x, y, f)
特别是,两个常规向量的外积是一个双下标的数组(就是矩阵,最大秩为1)。注
意,外积运算不符合交换律。定义你自己的R 函数可以参考编写你自己的函数
一个例子:2 ×2 数字矩阵的行列式
这是一个简单但能说明问题的例子,计算一个2 ×2 的矩阵[a; b; c; d] 的行列式。
该矩阵的所有元素是0; 1; : : : ; 9里面的一个数字。
我们的问题是找出所有这种组合形式的矩阵行列式ad &iexcl; bc,同时以高密度(high
density)图的形式显示这些行列式值的分布。如果所有数字的选取是独立随机的,这
样做实际上会得到所有行列式的概率分布图。
解决这个问题一个巧妙的办法就是两次使用函数outer():
> d <- outer(0:9, 0:9)
> fr <- table(outer(d, d, "-"))
> plot(as.numeric(names(fr)), fr, type="h",
xlab="Determinant", ylab="Frequency")
注意,这里把频率表的属性names 强制转换成数值以表示行列式值的范围。\显
式"解决这个问题是用for 循环语句。这个将在循环和条件控制<页码:52> 部分讨
论,不过效率太低以至现实中很少采用。
还有一点比较奇怪的是,每20个这样的矩阵就有有一个矩阵是奇异矩阵2。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2025-5-2 05:24 , Processed in 0.026432 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表