Julia 什么';将向量{T}(T<;:A)转换为向量{A}的最快方法是什么?
假设Julia 什么';将向量{T}(T<;:A)转换为向量{A}的最快方法是什么?,julia,Julia,假设A是一个抽象类型,我有一个函数f{T如果可能的话,我会将您的第二个函数定义更改为参数化的,如f。在方法签名中强制使用这种容器结构是一个很大的性能缺陷,它不会为您带来任何功能……而且只会使它们更难使用 这就是说,最好的转换方法是使用convert(Vector{A},x)进行这种转换,如果x已经是isaVector{A},那么这将是不可行的,否则它将与collect一样 原因如下:如果A!==B,则Vector{A}和Vector{B}类型的两个容器不能共享相同的内存,因为通过Vector{A
A
是一个抽象类型,我有一个函数f{T如果可能的话,我会将您的第二个函数定义更改为参数化的,如f
。在方法签名中强制使用这种容器结构是一个很大的性能缺陷,它不会为您带来任何功能……而且只会使它们更难使用
这就是说,最好的转换方法是使用convert(Vector{A},x)
进行这种转换,如果x
已经是isaVector{A}
,那么这将是不可行的,否则它将与collect
一样
原因如下:如果A!==B
,则Vector{A}
和Vector{B}
类型的两个容器不能共享相同的内存,因为通过Vector{A}将非B
元素分配给数组可能会损坏Vector{B}
中的数据
如果可能的话,我会将您的第二个函数定义更改为参数化的,就像f
一样。在方法签名中强制使用这种容器结构是一个很大的性能缺陷,它不会为您带来任何功能……而且只会使它们更难使用
这就是说,最好的转换方法是使用convert(Vector{A},x)
进行这种转换,如果x
已经是isaVector{A}
,那么这将是不可行的,否则它将与collect
一样
原因如下:如果A!==B
,则Vector{A}
和Vector{B}
类型的两个容器不能共享相同的内存,因为通过Vector{A}将非B
元素分配给数组可能会损坏Vector{B}
中的数据
我原以为只有位类型才能有效地打包到一个数组中。或者至少不可变的
字段都是位类型。你说得对;我的语言不够精确。我只是删除了这一部分原理-操作的不安全性是不支持此操作的充分理由。我知道我认为只有位类型才能有效地打包到一个数组中。或者至少是不可变的
,字段都是位类型。你是对的;我的语言不够精确。我只是删除了这一部分理由——操作的不安全性是不支持这一点的充分理由。