将Array {Int,1}转换为Array {Int,2}

时间:2018-06-19 11:56:52

标签: arrays type-conversion julia

我使用了一个以Array {Int,2}作为参数的函数,但是当该数组仅包含1个整数(在这种情况下,因为数组类型为Array {Int,1})时该函数不起作用。

我知道如何创建具有2个或更多整数的Array {Int,2}:

S2 = [1 2] # S2 is an Array{Int, 2}
S3 = [1 2 3] # S3 is an Array{Int, 2}

但是我不知道如何创建只有1个整数的Array {Int,2}:

S1 = [1] # S1 is an Array{Int, 1}

有可能吗?

2 个答案:

答案 0 :(得分:3)

另一种可能性是使用reshape

julia> S1 = [1]
1-element Array{Int64,1}:
 1

julia> reshape(S1,1,1)
1×1 Array{Int64,2}:
 1

答案 1 :(得分:2)

使用hcat函数,例如:

julia> hcat(1)
1×1 Array{Int64,2}:
 1

如果要将向量转换为矩阵,这也可以使用:

julia> x = [1]
1-element Array{Int64,1}:
 1

julia> hcat(x)
1×1 Array{Int64,2}:
 1

编辑:事后您也可以这样做:

julia> fill(10,1,1)
1×1 Array{Int64,2}:
 10

它更复杂,但是通过这种方式,您可以简单地创建一个更高维度的对象,例如:

julia> fill(10,1,1,1)
1×1×1 Array{Int64,3}:
[:, :, 1] =
 10

编辑2:将长度为1的新维放置在任何位置的任何数组的一般解决方案是使用理解:

julia> x = [1 2
            3 4]
2×2 Array{Int64,2}:
 1  2
 3  4

julia> [x[i,k] for i in 1:size(x,1), j in 1:1, k in 1:size(x,2)]
2×1×2 Array{Int64,3}:
[:, :, 1] =
 1
 3

[:, :, 2] =
 2
 4