Julia理解:将二维矩阵数组转换为二维矩阵
我使用Julia comprehension实现以下目标: 给定一个矩阵Julia理解:将二维矩阵数组转换为二维矩阵,julia,Julia,我使用Julia comprehension实现以下目标: 给定一个矩阵 A=[12;34] 我想把它扩展到 B = [1, 1, 1, 2, 2; 1, 1, 1, 2, 2; 1, 1, 1, 2, 2; 3, 3, 3, 4, 4; 3, 3, 3, 4, 4]. 现在我正和你一起做这件事 ns = [3, 2] B = [fill(B[i, j], ns[i], ns[j]) for i = 1:2, j = 1:2] 但是,它没有得到5x5矩阵,而是给了我: 2×2
A=[12;34]
我想把它扩展到
B =
[1, 1, 1, 2, 2;
1, 1, 1, 2, 2;
1, 1, 1, 2, 2;
3, 3, 3, 4, 4;
3, 3, 3, 4, 4].
现在我正和你一起做这件事
ns = [3, 2]
B = [fill(B[i, j], ns[i], ns[j]) for i = 1:2, j = 1:2]
但是,它没有得到5x5矩阵,而是给了我:
2×2 Array{Array{Int64,2},2}:
[0 0 0; 0 0 0; 0 0 0] [0 0; 0 0; 0 0]
[0 0 0; 0 0 0] [0 0; 0 0]
那么我应该如何将这个2d矩阵数组转换成2d矩阵呢?或者还有其他方法可以完成我需要的扩展吗?以下是两种方法示例(第一种方法使用您的方法,第二种方法不生成中间矩阵): 编辑 以下是另一个示例:
julia> A = [1 4 7 10
2 5 8 11
3 6 9 12]
3×4 Array{Int64,2}:
1 4 7 10
2 5 8 11
3 6 9 12
julia> hvcat(3, A...)
4×3 Array{Int64,2}:
1 2 3
4 5 6
7 8 9
10 11 12
julia> vec(A)
12-element Array{Int64,1}:
1
2
3
4
5
6
7
8
9
10
11
12
因此:
- 第一个参数告诉您要生成多少列
在hvcat
之前有v
,因此它按行获取元素h
- 但是,数组存储列列
因此,实际上您必须创建临时数组作为目标数组的转置(因为
hvcat
将使用其列来创建目标数组的行。实际上,这只是一个巧合-hvcat
不知道原始元素存储在矩阵中(它将它们作为调用的位置参数,当时它们存储在矩阵中的事实由于…
操作而丢失)。谢谢!正是我要找的。但是,我不理解数字“2”作为hvcat
的第一个参数的作用。文档中说“第一个参数指定每个块行中要连接的参数数量。”。如果我理解正确,那么我希望hvcat(2,[fill(A[I,j],ns[I],ns[j]),对于I=1:2,j=1:2])
也能工作,因为在每个块行中还有两个参数要连接。但它没有,并抛出以下错误:ArgumentError:number of arrays 1不是请求的块列数2的倍数。我将对答案进行编辑,以便您可以清楚地看到发生了什么。
julia> A = [1 4 7 10
2 5 8 11
3 6 9 12]
3×4 Array{Int64,2}:
1 4 7 10
2 5 8 11
3 6 9 12
julia> hvcat(3, A...)
4×3 Array{Int64,2}:
1 2 3
4 5 6
7 8 9
10 11 12
julia> vec(A)
12-element Array{Int64,1}:
1
2
3
4
5
6
7
8
9
10
11
12