在这个页面上,它说方法push!()并且append!()非常有效.
我的问题是它们的效率如何?
也就是说,
如果有人知道最终数组的大小,那么预先分配数组还是使用append!()/ 增量增长它push!()会更快吗?
现在考虑一个人不知道最终数组大小的情况.例如,将多个数组合并为一个大数组(称之为A).
实现这一目标的两种方法:
append!()-ing每个数组A,其大小尚未预先分配.A.然后预分配A并复制每个数组的内容.在这种情况下哪一个会更有效率?
似乎在Julia鼓励编写devectorized代码.甚至有一个包试图为你做这件事.
我的问题是为什么?
首先,从用户体验方面来讲,矢量化代码更简洁(代码更少,然后错误的可能性更小),更清晰(因此更容易调试),更自然的编写代码的方式(至少对于来自科学计算背景,朱莉娅试图迎合).能够写出类似vector'vector或vector'Matrix*vector非常重要的东西,因为它对应于实际的数学表示,这就是科学计算人员在脑海中想到它的方式(而不是嵌套循环).我讨厌这样的事实,这不是写这个的最好方法,并且将它重新分解为循环会更快.
目前,编写快速代码的目标与简洁/清晰的代码之间似乎存在冲突.
其次,技术原因是什么?好吧,我明白量化的代码创建额外的临时等,但矢量化功能(例如broadcast(),map()等),具有多线程他们的潜力,我认为多线程的好处会超过临时工和其他缺点的开销矢量化函数使它们比常规循环更快.
Julia中的矢量化函数的当前实现是否隐含多线程?
如果没有,是否有工作/计划为向量化函数添加隐式并发并使它们比循环更快?
我现在在Julia写一个大项目,我发现调试这段代码的唯一选择是Debug.jl.如果没有像MATLAB那样的调试器来调试这段代码,那就太麻烦了(!).
有没有这样的调试工具?即使他们处于阿尔法阶段,我也可以采用它们.
任何人都有时间表估计它们何时计划出现?
假设我有v一个类型的变量Vector.
什么是最好/最快的方式将其转换为Matrix表示(无论出于何种原因)?
澄清,v''将完成这项工作,但这是最好的方法吗?
我的问题是我怎么可以重载某些方法中的朱莉娅一定的阶级?
换句话说,假设我有一个类的以下定义:
type Sometype
prop::String
setValue::Function
# constructor
function Sometype()
this = new ()
this.prop = ""
####### v1 #######
this.setValue = function(v::Real)
println("Scalar Version was Invoked!")
# operations on scalar...
# ...
end
####### v2 #######
this.setValue = function(v::Vector{Real})
println("Vector Version was Invoked!")
# operations on vector...
# ...
end
####### v3 #######
this.setValue = function(v::Matrix{Real})
println("Matrix Version was Invoked!")
# operations on Matrix...
# ...
end
return this
end
end
Run Code Online (Sandbox Code Playgroud)
所以当我在我的主要代码中说:
st = Sometype()
st.setValue(val)
Run Code Online (Sandbox Code Playgroud)
根据是否 …
来自Julia的文档:
Julia函数参数遵循有时称为"pass-by-sharing"的约定......
这是否意味着更改函数内的可变对象也会更改调用范围内的对象?
但是如果对象是不可变的,那么在函数内部更改它不会影响调用者范围内的对象吗?在这种情况下,它与传递值有什么不同吗?
我是对的,!在函数末尾添加只是一个约定,但在编译中没有任何语义含义?
传递用户定义的复合类型的可变对象的值的最佳方法是什么?我尝试使用copy(),但得到错误说copy()没有为我的自定义类型定义.我想我需要扩展copy()我的自定义类型.在哪里可以找到copy()其他类型的定义(想在编写扩展时使用它们作为参考)?
为了激发我的问题,请考虑在Julia 中处理元素类型的锯齿状数组(为简单起见)时的情况Int.有两种方法可以存储它们:
Vector{Vector{Int}}Vector{Union{Vector{Int}, Int}}(特别是,如果想要存储足够多的1元素向量)我的问题是哪一个更有效/更快/更好?
为了回答这个问题,我需要知道每个内容是如何存储在内存中的.即:
我假定的类型的变量Vector{Vector{Int}},将被认为是均匀的型阵列,因此,我希望它被存储连续在存储器中,并且这样更CPU缓存友好.我对吗?或者连词只适用于元素数据类型是原始的数组?
一个类型的变量是否会Vector{Union{Vector{Int}, Int}}被视为异构数组,并且因此在内存中不 连续存储?
如何将内存中连续表示的好处与不具有1-元素数组成员的数组容器的好处进行比较,即将它们存储为原始数据类型(Int在本例中)?哪一个产生更高的效率?
我偶然发现了一些我觉得很奇怪的事情.
作为示例考虑代码
A = reshape(1:6, 3,2)
A/[1 1]
Run Code Online (Sandbox Code Playgroud)
这使
3×1 Array{Float64,2}:
2.5
3.5
4.5
Run Code Online (Sandbox Code Playgroud)
据我所知,通常这种划分给出了列的加权平均值,其中每个权重与向量的对应元素成反比.
所以我的问题是,为什么这样定义?
这个定义的数学证明是什么?
最近推出了Julia的新版本(0.4).我想安装它,因为我注意到我目前的0.3.11版本中存在一些错误.但是在安装0.4之后,我意识到我的0.3.11包装不是0.4.
考虑到包管理器的速度,再次重新安装这些包(并为每个版本更新重复此过程)将非常繁琐,所以我想知道是否有解决方法?
对于给定的自由度和α级,从Jul平方表中获取值的Julia函数是什么?
我在谈论这个:http://sites.stat.psu.edu/~mga/401/tables/Chi-square-table.pdf