Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在julia中创建用户类型的视图_Julia_Array View - Fatal编程技术网

在julia中创建用户类型的视图

在julia中创建用户类型的视图,julia,array-view,Julia,Array View,新的julia 0.5改进了对阵列视图的支持。是否可以使用此功能来允许自定义类型的视图?这样我就可以 immutable test a::Vector{Int} b::Vector{Int} end 然后定义一个getview函数,例如,当传递1:3作为参数时,它会给我一个test的视图,比如test(视图(a,1:3),视图(b,1:3)(这样做会创建一个新的测试对象,其中a和b是子数组的副本,这不是我想要的)。 谢谢!关键在于,如果您希望您的类型包含数组或子数组,则需要将其

新的julia 0.5改进了对阵列视图的支持。是否可以使用此功能来允许自定义类型的视图?这样我就可以

immutable test
    a::Vector{Int}
    b::Vector{Int}
end
然后定义一个
getview
函数,例如,当传递1:3作为参数时,它会给我一个
test
的视图,比如
test(视图(a,1:3),视图(b,1:3)
(这样做会创建一个新的测试对象,其中a和b是子数组的副本,这不是我想要的)。
谢谢!

关键在于,如果您希望您的类型包含数组或子数组,则需要将其参数化。否则,它将在构建新对象时转换(复制)

julia> immutable MyType{T}
           a::T
           b::T
       end

julia> Base.view(mt::MyType, args...) = MyType(view(mt.a, args...), view(mt.b, args...))

julia> mt = MyType(rand(5),rand(5))
MyType{Array{Float64,1}}([0.791258,0.605581,0.126802,0.559727,0.156383],[0.773287,0.223521,0.926932,0.0301801,0.68872])

julia> view(mt, 2:3)
MyType{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true}}([0.605581,0.126802],[0.223521,0.926932])

非常感谢!(朱莉娅的世界还很小,不是吗…)我必须承认我不完全理解它-为什么使类型参数化会改变数组是否被复制?你知道文档中有什么地方可以阅读吗?-我认为理解这一点可能会解决当前的一些难题…这比你想象的要容易。参数不仅仅意味着“我可以是任何东西,只要
a
b
具有相同的类型”。因此,如果你将任何相同类型的
a
b
传递给构造函数,它会很高兴地接受它们。但是,如果你明确地说“我必须有2个向量{Int}”,那么如果你传递给它们其他的东西,它会尝试
转换(向量{Int},a)
b的相同。还要注意,您可以使用类型签名
不可变的MyType{TThanks,好的,我没有意识到指定类型(非参数化)可能会触发复制,但我认为这是有意义的。我要创建视图的类型已经是参数化的,它们的字段也是复合类型,其中一些是参数化的,因此我可能触发对象的部分复制。我猜解决方案必须是使所有字段参数化,以确保不需要转换ce?这确实给了我一些东西去寻找。