如何在Julia中按行压缩2D和1D数组?

时间:2019-06-16 16:19:03

标签: arrays julia

如何在Julia中使用“向量” 行式压缩二维数组?

X = [1 2; 3 4]
ndims(X)
Y = [-1 -2]
ndims(Y)
first(zip(X,Y))

在我想获得(1, -1)的同时给([1 2], -1)

2 个答案:

答案 0 :(得分:2)

如果可以将列向量用于输入和输出,则可以使用eachrow函数,该函数遍历矩阵的行并将行作为列向量返回:

julia> X = [1 2; 3 4];

julia> Y = [-1, -2];

julia> collect(zip(eachrow(X), Y))
2-element Array{Tuple{Array{Int64,1},Int64},1}:
 ([1, 2], -1)
 ([3, 4], -2)

另一方面,如果您需要将压缩的元组的第一个元素作为行向量(如您的问题所示),则可以将矩阵转换为行向量,然后使用{{1} }:

zip

请注意,我在理解中使用的是julia> X = [1 2; 3 4]; julia> Y = [-1 -2]; julia> rows = [X[[i], :] for i in 1:size(X, 1)] 2-element Array{Array{Int64,2},1}: [1 2] [3 4] julia> collect(zip(rows, Y)) 2-element Array{Tuple{Array{Int64,2},Int64},1}: ([1 2], -1) ([3 4], -2) ,而不是X[[i], :],所以我们得到的是行数组而不是列向量数组。

最后,请注意,X[i, :]产生一个行向量。我们通常将向量表示为列向量:

Y = [-1 -2]

答案 1 :(得分:2)

Julia中有迭代器生成器:eachroweachcol,它们可用于数组且简洁(至少在这种情况下):

X = [1 2; 3 4]
Y = [-1 -2]
z = zip(eachrow(X), eachcol(Y))

然后

for el in z
    print(el)
end

给予

([1, 2], [-1])
([3, 4], [-2])