我需要转换
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])
是否有一种方法可以更简单地编写这样的表达式(即不重复大多数
[somefunc.(s)|>vec for s in a]
表达式)?这是
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