我正在尝试使用Julia解析大量文本文件,并且我想循环遍历文件名数组,而不是键入函数调用来单独读取每个文件.到目前为止,我一直无法找到一种方法来搜索文件夹中与模式匹配的文件.
是否有一个基础库Julia函数,它将返回给定文件夹中的所有文件名,匹配给定的字符串模式?
R中的等效函数是list.files(),如果这有助于传达我想要的东西.
python中的一个常见约定是按如下方式构造脚本的主要功能,因此它既可以直接作为脚本运行,也可以在导入时不导入执行main():
def main():
do_stuff()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
是否有类似的变量在Julia中设置,以便脚本可以知道它是使用导入require("script.jl"还是直接执行?
例如,说我有两个脚本,a.jl并且b.jl,具有沿magic_function()该行为如下:
a.jl:
println("Did we execute a.jl directly? ", magic_function())
Run Code Online (Sandbox Code Playgroud)
b.jl:
require("a.jl")
Run Code Online (Sandbox Code Playgroud)
执行以下命令会导致......
> julia a.jl
Did we execute a.jl directly? true
> julia b.jl
Did we execute a.jl directly? false
Run Code Online (Sandbox Code Playgroud)
magic_function()在Julia的当前分布中是否存在类似的函数?
我可以将类型信息添加到函数的参数中吗?
请考虑以下示例:
function f{T} (func, x::Int)
output = Dict{Int, Any}()
output[x] = func(x)
return output
end
Run Code Online (Sandbox Code Playgroud)
我不喜欢我必须说Any的字典的值类型.我宁愿做以下事情:
function f{T} (func::Function{Int->T}, x::Int)
output = Dict{Int, T}()
output[x] = func(x)
return output
end
Run Code Online (Sandbox Code Playgroud)
我可以提供类似这样的函数的类型提示吗?我有点想说以下
f :: (Int -> T), Int -> Dict{Int, T}
Run Code Online (Sandbox Code Playgroud) 考虑两个1-dim数组,一个包含要从中选择的项,另一个包含绘制另一个列表项的概率.
items = ["a", 2, 5, "h", "hello", 3]
weights = [0.1, 0.1, 0.2, 0.2, 0.1, 0.3]
Run Code Online (Sandbox Code Playgroud)
在朱莉娅,怎么能随意在选择项目items使用weights对重量绘图给定项目的概率是多少?
我正在为布尔2d数组编写一个函数:
function foo(A::Array{Bool,2})
...
end
Run Code Online (Sandbox Code Playgroud)
用它评估和测试它
A = randbool(3,3)
foo(A)
Run Code Online (Sandbox Code Playgroud)
回报
ERROR: 'foo' has no method matching foo(::BitArray{2})
Run Code Online (Sandbox Code Playgroud)
显然,randbool()生成一个BitArray,而我认为randbool()会产生一个Array{Bool}.
如何Array{Bool}和BitArray相关?为什么它们都存在?
我可以foo()用这样的方式编写它使用单一方法接受两种输入类型(因为我看不出差异)?
我遇到了以下问题:
我有一个名为TrainModel的函数,它在一个线程上运行很长时间.当它完成计算时,它返回一个函数作为输出参数,让我们称之为f.当我询问这个f的类型时,朱莉娅回归:
(1种方法的通用功能)
(我不确定这最后一条信息对于阅读此内容的人有用)
现在,在第二步中,我需要在非常大的值数组上应用函数f.这是我想要并行化的一个步骤.已经启动了具有多个流程的Julia,例如
julia -p 4
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会使用:
pmap(f, my_values)
Run Code Online (Sandbox Code Playgroud)
也许:
aux = @parallel (hcat) for ii=1:100000000
f(my_values[ii])
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.朱莉娅抱怨工人不知道功能f,即我得到一个消息:
错误:过程2中未定义函数f
我怎样才能使功能˚F提供给所有工人呢?显然,一个"脏"的解决方案是对所有工人运行耗时的函数TrainModel,这可能是:
@everywhere f = TrainModel( ... )
Run Code Online (Sandbox Code Playgroud)
但是当我想要的只是结果f可供所有工作人员使用时,这将浪费cpu .
虽然我搜索了类似问题的帖子,但到目前为止我找不到答案......
提前致谢!最好,
N.
说我有一个朱莉娅性状,其涉及两种类型:一种类型是一种"基地"类型的可满足一种局部性状,另一种是一个相关联的是唯一地由基类型确定类型.(也就是说,BaseType - > AssociatedType的关系是一个函数.)这些类型一起满足了我感兴趣的复合特征.
例如:
using Traits
@traitdef IsProduct{X} begin
isnew(X) -> Bool
coolness(X) -> Float64
end
@traitdef IsProductWithMeasurement{X,M} begin
@constraints begin
istrait(IsProduct{X})
end
measurements(X) -> M
#Maybe some other stuff that dispatches on (X,M), e.g.
#fits_in(X,M) -> Bool
#how_many_fit_in(X,M) -> Int64
#But I don't want to implement these now
end
Run Code Online (Sandbox Code Playgroud)
现在这里有几个示例类型.请忽略示例的细节; 它们仅仅意味着MWE,细节上没有任何相关内容:
type Rope
color::ASCIIString
age_in_years::Float64
strength::Float64
length::Float64
end
type Paper
color::ASCIIString
age_in_years::Int64
content::ASCIIString
width::Float64
height::Float64
end
function isnew(x::Rope)
(x.age_in_years < 10.0)::Bool
end
function coolness(x::Rope)
if x.color=="Orange" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Julia 进行自相关并将其与 Python 的结果进行比较。他们怎么会给出不同的结果?
朱莉娅代码
using StatsBase
t = range(0, stop=10, length=10)
test_data = sin.(exp.(t.^2))
acf = StatsBase.autocor(test_data)
Run Code Online (Sandbox Code Playgroud)
给
10-element Array{Float64,1}:
1.0
0.13254954979179642
-0.2030283419321465
0.00029587850872956104
-0.06629381497277881
0.031309038331589614
-0.16633393452504994
-0.08482388975165675
0.0006905628640697538
-0.1443650483145533
Run Code Online (Sandbox Code Playgroud)
Python代码
from statsmodels.tsa.stattools import acf
import numpy as np
t = np.linspace(0,10,10)
test_data = np.sin(np.exp(t**2))
acf_result = acf(test_data)
Run Code Online (Sandbox Code Playgroud)
给
array([ 1. , 0.14589844, -0.10412699, 0.07817509, -0.12916543,
-0.03469143, -0.129255 , -0.15982435, -0.02067688, -0.14633346])
Run Code Online (Sandbox Code Playgroud) 这有效:
struct Comic
endpoint::String
end
function Comic(id::Int)
url = "https://xkcd.com/$id/info.0.json"
Comic(url)
end
Comic(1)
Run Code Online (Sandbox Code Playgroud)
它返回Comic("https://xkcd.com/1/info.0.json")。
这不起作用:
struct Comic
endpoint::String
end
function Comic(id::String)
url = "https://xkcd.com/$id/info.0.json"
Comic(url)
end
Comic("1")
Run Code Online (Sandbox Code Playgroud)
它杀死了 Julia 进程。
为什么第二个例子不起作用?