简化Julia元组创建



我需要转换

2-element Vector{Matrix{Tuple{Real, Real}}}:
[(1, 2) (1.8, 2.1) (3, 2)]
[(1, 3) (2.2, 2.9) (3, 3)]

(Vector{Real}[[1, 1.8, 3], [1, 2.2, 3]], Vector{Real}[[2, 2.1, 2], [3, 2.9, 3]])

对于这个,我的朴素方法是

a=[[(1,2) (1.8,2.1) (3,2)],[(1,3) (2.2,2.9) (3,3)]]
b=([first.(s)|>vec for s in a],[last.(s)|>vec for s in a])
  1. 是否有一种方法可以更简单地编写这样的表达式(即不重复大多数[somefunc.(s)|>vec for s in a]表达式)?

  2. 这是a在两个向量中包含>1e6元素的有效解吗?

要获取元组中的第一个元素,您需要的方法可以是

map(i -> reshape(getindex.(i, 1), :), v)

然后

Tuple(map(i -> reshape(getindex.(i,j),:), v) for j in 1:2)

应该给你你想要的输出,我不确定这是不是太好了

性能是相同的,但我可以在1秒内运行它。在我的笔记本电脑上是E6,所以应该没问题,除非你有非常大的向量。

编辑:我把6写成了8

最新更新