为什么在这种情况下方法定义的顺序会有所不同?在我看来,这没有多大意义。
julia> f() = 1
f (generic function with 1 method)
julia> f(;arg) = 1
f (generic function with 1 method)
julia> f()
ERROR: UndefKeywordError: keyword argument arg not assigned
Stacktrace:
[1] f() at ./REPL[2]:1
[2] top-level scope at REPL[3]:1
julia&g
当为一个数组建立多个级别的索引时,它可以正常工作。但是当我用它来赋值时,它没有。有人知道为什么A不会在下面改变吗?
In [4]: A = rand(6)
Out [4]: 6-element Array{Float64,1}:
0.111552
0.155126
0.78485
0.147477
0.362078
0.959022
In [5]: A[3:5][[true,false,true]]
Out [5]: 2-element Array{Float64,1}:
0.78485
0.362078
In [6]: A[3:5][[true,false,
在将一个程序从Python翻译到Julia之后,我非常不满意:
对于小/非常小的输入,Python更快。
对于中等输入,Julia速度更快(但没有那么大)
对于大输入,Python更快
我认为原因是我不明白内存分配是如何工作的(在这里自动执行操作,没有CS背景)。我会在这里张贴我的代码,但它太长,太具体,它不会对任何人都有益,除了我。因此,我做了一些实验,现在我有一些问题。
考虑一下这个简单的script.jl
function main()
@time begin
a = [1,2,3]
end
end
main()
当我运行它时,我得到:
using NLsolve
function g!(G,x)
G .= [x[1]^2-x[2] for i in 1:3]
end
nlsolve(g!,[0.1, 0.1]) 此代码给出了一个DimensionMismatch("array could not be broadcast to match destination") 当我改用G .= [x[1]^2-x[2] for i in 1:2]时,我没有得到这个错误。看起来NLsolve希望输入和输出的大小相同。这是一个bug,还是我做错了什么?
我正在用Julia编写代码,它收集函数foo的一些输出(它会变异其输入参数),并且我试图将来自这个函数的递归计算附加到数组A中。
例如,foo!(x)通过向其每个元素添加1来更改x的值。
function foo!(x)
x .= x .+ 1
return(x)
end
julia> x = [1, 1];
julia> foo!(x);
julia> x
2-element Array{Int64,1}:
2
2
我想要创建一个数组A,它在一个固定的范围内存储x = f(x)的值。但是,A最终只包含f(x)最终值的多个副本,例如,
julia&
下面是一个简单的代码示例:
Pkg.add("Graphs")
using Graphs
gd = simple_graph(20, is_directed=true) # directed graph with 20 nodes
nodeTo = 2
for nodeFrom in vertices(gd) # add some edges...
if(nodeTo != 20)
add_edge!(gd, nodeFrom, nodeTo)
nodeTo +=1
end
end
for i in edges(gd) # Pri
你好,我有问题,我尝试返回我定义的变量,但是我得到一个错误变量没有定义
type Family
name:: AbstractString
value:: Int
left:: Nullable{Family}
right:: Nullable{HuffmanNodeA}
Family(name:: AbstractString, value::Int ) = new(name, value , Nullable{Family}(), Nullable{Family}())
end
A = [
我尝试将一个字符串添加到数组中,如下所示: arry = String[]
append!(arry, "test") 但是我得到了以下错误: Cannot `convert` an object of type Char to an object of type String 为什么我在添加字符串而不是字符时会出现这个错误? (为了其他Julia新手的利益,在下面发布我自己的答案-任何有更多有用提示的人请加入!)
给定以下函数,
function floop(exp)
a = 5
b = 10
ex = Expr(:call, :+, 1, exp);
return eval(ex);
end
如果我随后运行
floop(Symbol("b"))
我得到一个错误,告诉我b没有定义。为什么这不起作用?我怎么才能让它工作呢?
在Julia标准库中有一个Markdown模块。然而,在中并没有说明如何在这个标记中包含普通的html。例如
using Markdown
a = Markdown.parse("This is *important* text with <i>html</i> in it");
# parsed as
Markdown.Paragraph(Any["This is ", Markdown.Italic(Any["important"]), " text with <i>html</i> i
有人能帮我理解下一件事吗?
1)为什么我们需要在创建链接列表的同时,为未来的结构创建一个新的抽象类?
( 2)为什么会有争论?
3)这个操作符是做什么的<:(没有在书中找到)?
( 4)我们是否可以用以下方式书写,而不是举例:
type LinkedList
name = Ptr{Uint8}
next :: LinkedList
end
示例:
abstract type LinkedList{T} end
mutable struct Nil{T} <: LinkedList{T}
end
mutable struct Cons{T} <: Link
我现在开始使用Julia,我需要插值一个布朗运动。我运行了以下代码,但出现了以下错误。 N = 3
B = zeros(N)
B[N] = randn(1) 这会抛出: MethodError: Cannot `convert` an object of type Vector{Float64} to an object of type Float64
我的代码:
details = """'Swift', '2014', 'compiled'; 'Objective-C', '1984', 'compiled'; 'Scala', '2004', 'compiled'"""
println("Reding the following data will make it easier for you to create an array: $d
在我的代码中,我需要跟踪两种数据项,即原始数据项和转换后的数据项。我将原始数据项和转换数据项都存储为Array{Float64,1}。但是,我需要跟踪数据项是否是转换的数据项,因为我的代码中的一些函数处理原始数据项,有些函数处理转换后的数据项。
为了确保正确性,并避免将转换后的数据项传递给本应处理原始数据项的函数,我想我可以创建一个名为Transformed的类型。这种类型可以在函数声明中使用,从而增强正确性。
当然,我查看了文档,但这对我没有足够的帮助。我想我需要做的是:
primitive type Transformed :< Array{Float64,1} end
但当然,这是