如何在Julia中使用“向量” 行式压缩二维数组?
此
X = [1 2; 3 4]
ndims(X)
Y = [-1 -2]
ndims(Y)
first(zip(X,Y))
在我想获得(1, -1)
的同时给([1 2], -1)
。
答案 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中有迭代器生成器:eachrow
和eachcol
,它们可用于数组且简洁(至少在这种情况下):
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])