【问题标题】:"requires numeric/complex matrix/vector arguments" error in matrix multiplication with matrices of correct shapes and sizes“需要数字/复数矩阵/向量参数”矩阵乘法中的错误与正确形状和大小的矩阵相乘
【发布时间】:2021-04-25 00:33:20
【问题描述】:

我想生成长度为 n 的泊松分布随机向量。出于测试目的,我将强度向量 lambda 定义为lambda <- c(1:12)。最初我认为使用 lapply 函数生成随机向量是一个简单的过程,因为我们可以简单地写

vec <- as.matrix(lapply(lambda, function(s) rpois(1, s)))

但是对于任何适当大小的矩阵,例如B &lt;- matrix(data = rep(1, 84), nrow = 7, ncol = 12) 我们得到矩阵乘法

B%*%vec

给予

B %*% vec 中的错误:需要数字/复矩阵/向量参数

我认为我可能对 lapply 做错了,但创建一个空的 12x1 向量并将泊松分布值插入其组件会产生相同的错误。

首先,是什么导致了这个错误?其次,是否有一种方便的方法可以从任意 p.r. 创建长度为 n 的随机向量?分布?

【问题讨论】:

  • 查看str(vec) 返回的内容。 VTC 是一个简单的错字。

标签: r matrix probability


【解决方案1】:

您创建的vec 是一列列表(因为您的lapply 调用)。您可以通过检查第一个元素来看到这一点:

vec[1, ]

[[1]]
[1] 1

另一种方法是将您的 lambda 向量直接提供给rpois

vec <- rpois(12, lambda = 1:12)
B <- matrix(1, nrow = 7, ncol = 12)
B %*% vec

     [,1]
[1,]   87
[2,]   87
[3,]   87
[4,]   87
[5,]   87
[6,]   87
[7,]   87

【讨论】:

  • 所以一般来说,如果我在一个名为lambda的列向量中有不同的强度,我可以通过rpois(length(lambda), lambda)创建对应的随机向量吗?
  • 是的。随机数生成器通常接受位置、比例等向量。
猜你喜欢
  • 2017-03-12
  • 2018-05-08
  • 2021-12-04
  • 2022-06-10
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多