Julia理解:将二维矩阵数组转换为二维矩阵

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

我使用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 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