不同大小的矩阵相乘
Matrices of difent size multiplication
晚上好
在 Rstudio 中
我在将这两个不同大小的矩阵相乘时遇到问题,而且情况变得更糟,因为我必须以 d2$ID=1 行中的值相乘的方式相乘 只有 w$sample=1 的重复。
样本和ID表示是同一个样本
换句话说,从 "subset" d2$ID=1 开始,每个值 ("L1"、"ST"、"GR"、"CB"、 "HSK", "DDM") 必须乘以整个 "subset" w$sample=1(在这种情况下是 4 行,但并非总是如此),是的,所有值 "G2", "G4"、"G6"、"G8"、"G12"
>d2
ID L1 ST GR CB HSK DDM
1 1 0.1662000 0.2337000 0.3637000 0.11110000 0.10100000 0.024300000
2 2 0.1896576 0.2280830 0.3705740 0.09406879 0.09319434 0.024422281
3 3 0.1110259 0.2217769 0.4180797 0.11122498 0.10902635 0.028866094
4 4 0.1558785 0.2008862 0.4222565 0.09805538 0.10218119 0.020742172
5 5 0.1536421 0.1674096 0.4205395 0.14362176 0.08635519 0.028431849
6 6 0.1841964 0.1514189 0.4603306 0.10243621 0.08928011 0.012337688
> w
sample G2 G4 G6 G8 G12
1 1 10.9 15.9 21.4 28.0 37.8
2 1 11.5 16.6 22.2 29.5 38.3
3 1 10.3 15.1 20.7 28.3 36.7
4 1 11.7 18.1 24.8 31.2 39.5
5 2 11.0 16.8 22.4 30.6 38.0
6 2 10.1 15.9 22.5 30.2 36.7
7 2 12.8 17.8 22.8 28.7 37.1
8 2 11.8 16.3 20.8 27.3 34.7
9 2 11.9 16.7 21.6 28.3 34.6
10 3 12.0 18.1 24.2 30.9 40.0
11 3 12.2 17.7 24.2 31.7 40.5
12 4 11.1 16.5 22.7 31.0 39.2
13 4 12.5 19.8 27.4 32.8 38.8
14 4 12.4 19.2 25.8 33.0 39.9
15 4 12.4 19.2 26.2 33.4 38.9
16 4 13.4 18.3 23.7 30.0 38.2
17 5 13.3 18.6 24.0 30.7 38.4
18 5 13.3 18.1 22.9 30.1 36.8
19 5 13.7 19.9 26.5 33.8 43.0
20 5 12.7 18.2 24.6 32.5 41.3
21 6 12.1 17.5 24.3 33.7 42.2
22 6 14.5 20.8 28.4 35.3 43.7
我已经检查了很多问题,但我无法弄清楚,特别是因为大部分信息都是针对相同大小的矩阵。
我试过从d2过滤数据,但是数据集真的很大,效率真的很低。
我是一个初学者,如果你认为是那么容易的话,至少请指点一下!
我有几个这样的数据集...
提前致谢!
这似乎符合要求:
res <- apply(w, 1, function(x){ unclass(
outer(as.matrix( x[-1] ),
as.matrix( d2[1, c( "L1", "ST", "GR", "CB", "HSK", "DDM")])))})
str(res)
# result
# num [1:30, 1:22] 1.81 2.64 3.56 4.65 6.28 ...
# - attr(*, "dimnames")=List of 2
# ..$ : NULL
# ..$ : chr [1:22] "1" "2" "3" "4" ...
我几乎在第一遍就做对了,但经过一些调试后发现我需要将 as.matrix 调用添加到外部的两个参数中(可以这么说;-)。为了解释我的逻辑......我想 运行 用 apply
向下排列 w 的每一行,然后对第一列(w 的每一行)的值使用 match
到d2 的唯一行。 match
函数就是为此目的而设计的,return 一个合适的数字用于索引。然后对于行的其余部分(x[-1]
通过函数调用时),我将在与 d2
的所需行和列交叉的行值上使用 outer
.如果您在没有调用 as.matrix 的情况下执行此操作,您会收到一条错误消息:
Error in tcrossprod(x, y) :
requires numeric/complex matrix/vector arguments
我不认为这是一个非常有用的错误消息。两个参数都是数值向量。
晚上好
在 Rstudio 中
我在将这两个不同大小的矩阵相乘时遇到问题,而且情况变得更糟,因为我必须以 d2$ID=1 行中的值相乘的方式相乘 只有 w$sample=1 的重复。
样本和ID表示是同一个样本
换句话说,从 "subset" d2$ID=1 开始,每个值 ("L1"、"ST"、"GR"、"CB"、 "HSK", "DDM") 必须乘以整个 "subset" w$sample=1(在这种情况下是 4 行,但并非总是如此),是的,所有值 "G2", "G4"、"G6"、"G8"、"G12"
>d2
ID L1 ST GR CB HSK DDM
1 1 0.1662000 0.2337000 0.3637000 0.11110000 0.10100000 0.024300000
2 2 0.1896576 0.2280830 0.3705740 0.09406879 0.09319434 0.024422281
3 3 0.1110259 0.2217769 0.4180797 0.11122498 0.10902635 0.028866094
4 4 0.1558785 0.2008862 0.4222565 0.09805538 0.10218119 0.020742172
5 5 0.1536421 0.1674096 0.4205395 0.14362176 0.08635519 0.028431849
6 6 0.1841964 0.1514189 0.4603306 0.10243621 0.08928011 0.012337688
> w
sample G2 G4 G6 G8 G12
1 1 10.9 15.9 21.4 28.0 37.8
2 1 11.5 16.6 22.2 29.5 38.3
3 1 10.3 15.1 20.7 28.3 36.7
4 1 11.7 18.1 24.8 31.2 39.5
5 2 11.0 16.8 22.4 30.6 38.0
6 2 10.1 15.9 22.5 30.2 36.7
7 2 12.8 17.8 22.8 28.7 37.1
8 2 11.8 16.3 20.8 27.3 34.7
9 2 11.9 16.7 21.6 28.3 34.6
10 3 12.0 18.1 24.2 30.9 40.0
11 3 12.2 17.7 24.2 31.7 40.5
12 4 11.1 16.5 22.7 31.0 39.2
13 4 12.5 19.8 27.4 32.8 38.8
14 4 12.4 19.2 25.8 33.0 39.9
15 4 12.4 19.2 26.2 33.4 38.9
16 4 13.4 18.3 23.7 30.0 38.2
17 5 13.3 18.6 24.0 30.7 38.4
18 5 13.3 18.1 22.9 30.1 36.8
19 5 13.7 19.9 26.5 33.8 43.0
20 5 12.7 18.2 24.6 32.5 41.3
21 6 12.1 17.5 24.3 33.7 42.2
22 6 14.5 20.8 28.4 35.3 43.7
我已经检查了很多问题,但我无法弄清楚,特别是因为大部分信息都是针对相同大小的矩阵。
我试过从d2过滤数据,但是数据集真的很大,效率真的很低。
我是一个初学者,如果你认为是那么容易的话,至少请指点一下! 我有几个这样的数据集...
提前致谢!
这似乎符合要求:
res <- apply(w, 1, function(x){ unclass(
outer(as.matrix( x[-1] ),
as.matrix( d2[1, c( "L1", "ST", "GR", "CB", "HSK", "DDM")])))})
str(res)
# result
# num [1:30, 1:22] 1.81 2.64 3.56 4.65 6.28 ...
# - attr(*, "dimnames")=List of 2
# ..$ : NULL
# ..$ : chr [1:22] "1" "2" "3" "4" ...
我几乎在第一遍就做对了,但经过一些调试后发现我需要将 as.matrix 调用添加到外部的两个参数中(可以这么说;-)。为了解释我的逻辑......我想 运行 用 apply
向下排列 w 的每一行,然后对第一列(w 的每一行)的值使用 match
到d2 的唯一行。 match
函数就是为此目的而设计的,return 一个合适的数字用于索引。然后对于行的其余部分(x[-1]
通过函数调用时),我将在与 d2
的所需行和列交叉的行值上使用 outer
.如果您在没有调用 as.matrix 的情况下执行此操作,您会收到一条错误消息:
Error in tcrossprod(x, y) :
requires numeric/complex matrix/vector arguments
我不认为这是一个非常有用的错误消息。两个参数都是数值向量。