You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将向量a的每个元素与数组c中的每个矩阵相乘?代码计算顺序异常求助

问题:数组与向量逐矩阵相乘的顺序错误

我用array函数生成了包含3个矩阵的数组,想要将向量a中的每个值分别与数组里的每个矩阵相乘,但运行代码后发现计算结果的顺序不符合预期,求解决方法。

我的代码如下:

N <- c("P1", "P2", "D1", "D2")

a = matrix(c(16.2, 18, 21), ncol = 3)

b <- matrix(c(
  0,  2721, 3109, 1943,
  2721, 0, 1166, 1943,
  3109, 1166, 0, 1166,
  1943, 1943, 1166,0
), ncol = 4, dimnames = list(N, N))

c <- array(c(b), dim = c(4,4,3))[,,c(1:3)]* a[c(1:3)]

问题原因

问题出在R的广播机制和维度匹配上:

  • 你定义的a是1行3列的矩阵,用a[c(1:3)]提取后会变成长度为3的向量,但R在进行数组与向量相乘时,会按列优先的顺序循环向量元素,导致乘法的对应关系错位。
  • 另外,你生成数组的方式array(c(b), dim = c(4,4,3))[,,c(1:3)]可以简化,直接用array(b, dim = c(4,4,3))就能生成包含3个b矩阵的数组,不需要额外索引。

解决方案

要让a的每个元素对应数组的每个矩阵,需要让a的维度与数组的第三个维度匹配,这样广播机制就能正确对应相乘:

N <- c("P1", "P2", "D1", "D2")

# 直接将a定义为向量,更直观
a <- c(16.2, 18, 21)

b <- matrix(c(
  0,  2721, 3109, 1943,
  2721, 0, 1166, 1943,
  3109, 1166, 0, 1166,
  1943, 1943, 1166,0
), ncol = 4, dimnames = list(N, N))

# 生成包含3个b矩阵的4×4×3数组
c_array <- array(b, dim = c(4,4,3))

# 将a转换为1×1×3的数组,匹配原数组的第三个维度
result <- c_array * array(a, dim = c(1,1,3))

# 验证结果:第一个矩阵是b×16.2,第二个是b×18,第三个是b×21
# 示例:查看第二个矩阵中P2行P1列的值,应为2721×18=48978
result[2,1,2]

这样处理后,数组的每个矩阵会准确对应a中的一个数值相乘,不会出现顺序错误。

内容的提问来源于stack exchange,提问作者Simen Fjælberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:15:43