我已定义了类似
的复合类型type Position
Date::DateTime
x::AbstractFloat
y::AbstractFloat
z::AbstractFloat
end
和数组1维对象数组(复合类型)定义如下
arr = [Position(DateTime(2016,1,1,10,00,00),0,0,0),
Position(DateTime(2016,1,1,10,00,01),2,0,0),
Position(DateTime(2016,1,1,10,00,02),2,1,0),
Position(DateTime(2016,1,1,10,00,03),2,2,0),
]
我可以使用
轻松获取a_Dates
(日期数组)
a_Dates = map(rec->rec.Date, arr)
但我不知道如何获得二维位置数组(x,y,z)
理想情况下,我想要一个没有for循环的解决方案。 为此,我知道我可以做(例如)
Nrows, Ncols = length(arr), length(fieldnames(Position)) - 1
data = zeros(Nrows, Ncols)
for i in 1:Nrows
for j in 1:Ncols
data[i, j] = getfield(arr[i], j + 1)
end
end
答案 0 :(得分:1)
阵列
new_array = map(rec->[rec.x, rec.y, rec.z], arr)
<强>另外强>
new_array = vcat(new_array)
new_array = reshape(new_array,convert(Int64, length(new_array)/3),3)
或
new_array = reshape(new_array,length(arr),3)
答案 1 :(得分:1)
[getfield(p, f) for p in arr, f in (:x, :y, :z)]
您要找的是什么?
(在julia 0.4中,这将给出Array{Any}
,但在这种情况下,您可以只使用前缀Float64
来获取正确的类型。)