arrays - 将一维对象数组(复合类型)转换为二维数组

标签 arrays julia

我定义了一个复合类型,例如

type Position
  Date::DateTime
  x::AbstractFloat
  y::AbstractFloat
  z::AbstractFloat
end

对象的一维数组(复合类型)的定义如下

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

最佳答案

数组

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)

关于arrays - 将一维对象数组(复合类型)转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39560340/

相关文章:

string - 如何将整数转换为没有 0x 的十六进制字符串(Julia 1.0)

c - 是否为动态整数数组?

arrays - 如何查找数组是否包含对象

julia - 如何在 Julia 中设置 MIME 编码?

julia - 就地更新函数参数

performance - 为什么 Julia 在第一次调用我的模块时要花很长时间?

arrays - 3D/4D 数组如何以列优先顺序在内存中连续存储?

c - 在 C 中传递和返回二维数组

javascript - 多维数组到对象

julia - 错误 : setfield! 无法在 Julia 中更改不可变结构