R中的二维数组列表上的矩阵乘法

伊利亚·舒罗夫(Ilya V. Schurov)

我有一个包含三个的二维数组的列表xy以及z一些点的坐标(为了从中绘制表面,我将它们存储在二维数组中,就像MATLAB中的曲面图一样)。

例子:

points <- list(x=matrix(c(1, 2, 3, 4), nrow=2), 
               y=matrix(c(5, 6, 1, 4), nrow=2), 
               z=matrix(c(1, 9, 2, 3), nrow=2))

这是具有坐标的点的表示(1, 5, 1)(2, 6, 9)依此类推(总共4个点)。

现在,我必须将每个(x, y, z)点与某个固定矩阵相乘C(以旋转我的表面),并以二维矩阵列表的相同形式返回结果。

我可以这样用循环来做到这一点:

apply_matrix <- function(C, points) {
  x <- points$x
  y <- points$y
  z <- points$z
  n <- nrow(x)
  m <- ncol(x)
  outx <- matrix(rep(0, n*m), nrow = n)
  outy <- matrix(rep(0, n*m), nrow = n)
  outz <- matrix(rep(0, n*m), nrow = n)

  for (i in 1:nrow(x)) {
    for (j in 1:ncol(x)) {
      out <- C %*% c(x[i, j], y[i, j], z[i, j])
      outx[i,j] <- out[1,]
      outy[i,j] <- out[2,]
      outz[i,j] <- out[3,]
    }
  }
  list(x=outx,y=outy,z=outz)
}

但是,我正在寻找更有效的无环解决方案。

我相信可以将列表转换为三维矩阵,然后要求RC使用适当的尺寸将矩阵乘以此三维矩阵,但无法弄清楚该怎么做。

朱利叶斯·维诺拉(Julius Vainora)

在这里,我首先将列表转换为三维数组,然后还返回一个数组:

C <- matrix(rnorm(3 * 3), 3)
ar <- array(unlist(points), c(dim(points[[1]]), 3))
aperm(apply(ar, 1:2, `%*%`, x = t(C)), c(2, 3, 1))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

二维数组的numpy列表乘法

来自分类Dev

Scala中的二维数组乘法

来自分类Dev

如何乘以二维数组?矩阵乘法

来自分类Dev

如何从python中的列表创建矩阵或二维列表?

来自分类Dev

用R中列表中的行有效地填充二维矩阵

来自分类Dev

如何在Python中输入矩阵(二维列表)?

来自分类Dev

在 Python 中创建二维矩阵列表

来自分类Dev

在 C 中对二维数组(矩阵)进行排序

来自分类Dev

在 SystemVerilog 中制作二维数组/矩阵

来自分类Dev

numpy:二维数组矩阵的大小?

来自分类Dev

以二维数组显示矩阵

来自分类Dev

使用numpy中的标量乘法对二维矩阵进行归一化

来自分类Dev

Java中二维矩阵乘法的问题

来自分类Dev

Java中二维矩阵乘法的问题

来自分类Dev

Numpy在二维矩阵上的where()

来自分类Dev

Numpy在二维矩阵上的where()

来自分类Dev

根据二维数值数组中零值的坐标在矩阵中的位置将其分组为列表

来自分类Dev

如何从二维数组列表中获取价值

来自分类Dev

检查二维数组中列表的存在

来自分类Dev

二维数组列表数组混淆

来自分类Dev

二维if / then矩阵

来自分类Dev

arduino上PROGMEM(AVR)中布尔的二维数组

来自分类Dev

在numpy中组合二维矩阵

来自分类Dev

libgdx中的二维矩阵

来自分类Dev

在numpy中组合二维矩阵

来自分类Dev

在java中打印二维矩阵

来自分类Dev

通过使用二维数组乘法表

来自分类Dev

如何在R中创建二维列表

来自分类Dev

如何在R中创建二维列表