在Julia的for循环中,有没有一种方法可以操作previous和next的值呢?我在Julia文档中找不到任何答案。 示例: List1 = ["a", "b", "c"]
for letter in List1
println(previous letter)
end 当这个循环在"b“上运行时,它会给出"a”作为结果,依此类推。
我希望迭代一组dicts,并计算一个函数,该函数每次接受一个Dict。在R语言中,我有一个列表列表,并希望对每个子列表应用我的函数(该函数接受一个列表作为输入):
function dfun(d::Dict)
println(collect(keys(d)))
println(collect(values(d)))
end
# my dict of dicts
d = [1 => ["a" => 1.1], 2 => ["b" => 3.12]]
[2=>["b"=>3.12],1=>
我经常想通过Julia中的矩阵来迭代逐行或按列排列,所以我创建了一对函数来帮助:
function cols(x::Matrix)
function _it()
for ii in 1:size(x,2)
produce(x[:,ii])
end
end
Task(_it)
end
function rows(x::Matrix)
function _it()
for ii in 1:size(x,1)
produce(x[ii,:])
end
在下面的代码中,内部循环创建一个全为1的向量,然后将该向量的每个值设置为0。这个向量的和应该是0。但是,如果我在内部循环中使用Threads.@threads,有时它不会。我是否违反了使用此代码进行多线程处理的规则?看起来内部循环并不总是“结束”。我将JULIA_NUM_THREADS设置为4。 N = 1000
M = 1000
for i in 1:N
test = trues(M)
Threads.@threads for j in 1:M
test[j] = 0
end
s = sum(test)
if s > 0
我遇到了这个问题
julia> Tinit = 0.0
0.0
julia> for ii in 1:10
timeinterval = Tinit:0.05:(Tinit + 0.05)
println(Tinit + 0.05)
for item in timeinterval
println("+++++++++ ", item)
end
Tinit = timeinterval[end]
在Julia中,什么等同于Python的getattr()?我尝试了下面的元编程代码,但它只能在全局范围内工作,而不能在函数范围内工作。
type A
name
value
end
a = A("Alex",1)
for field in fieldnames(a)
println(eval(:(a.$field)))
end
这将打印出来:
Alex
1
但是,如果上面的代码在一个函数作用域内,那么它就不会工作
function tmp()
a = A("Alex",1)
for field in fieldnames(a)
我试图让我的朱莉娅代码更容易理解(物理学家),并认为如果我可以使用某种向量类型的迭代器,那就太好了。我试图使用每个元素作为迭代器。到目前为止,我的解决办法是:
kcut=2
= Array{Float64}(undef,3)
Ø = [0, 0, 0]
for [1] in -kcut:kcut, [2] in -kcut:kcut, [3] in -kcut:kcut
if norm()^2 <= kcut^2 && != Ø
println()
end
end
println()
几乎可以做到它应该做的事。唯一的问题是,一旦我完成
for i=1:5
if(i==1)
z = i
end
println("i = $i, z = $z")
end
i = 1, z = 1
ERROR: UndefVarError: z not defined
Stacktrace:
[1] top-level scope at ./REPL[6]:5 [inlined]
[2] top-level scope at ./none:0
上述脚本的行为令我费解。有人能帮助我理解为什么打印在i=1时工作,而当i=2时失败。
我必须遵循典型的类型结构 abstract type bla end
abstract type blup <: bla end
mutable struct Ablup <: blup
a::Real
end
mutable struct Bblup <: blup
b::Real
end
init(obj::bla) = println("bla")
init(obj::blup) = println("blup")
init(obj::Ablup) = println("Ablup")
init(o
for i in Iterators.reverse(Iterators.drop([1,2], 1))
println(i)
end
MethodError: no method matching iterate(::Base.Iterators.Reverse{Base.Iterators.Drop{Array{Int64,1}}})
Closest candidates are:
iterate(!Matched::LibGit2.GitRevWalker) at /buildworker/worker/package_linux64/build/usr/share/juli
我正在尝试理解Julia中的多线程行为,并注意到在Juliav1.6.3中,以下两个代码块的行为不同(我在某些script.jl中运行Atom ):
acc = 0
Threads.@threads for i in 1:1000
global acc
println(Threads.threadid(), ",", acc)
acc += 1
end
acc
和
acc = 0
Threads.@threads for i in 1:1000
global acc
acc +
我在一个.jl文件中编写了一个简单的函数,我可以使用forward成功地区分它。但是,我对Julia并不熟悉,我不知道如何查看为区分函数生成的源代码。我尝试过各种各样的东西,比如@code_lowered Zygote.forward(maxPool, [1.0, 2.0])和@code_lowered Zygote.forward(maxPool),但是它们只是向我展示了转发自己的调用。
我如何看到Zygote为向前和反向传递生成的代码?
using Pkg
using Zygote, ForwardDiff
function size1d(v)
return size(v)[1]
在Julia中,我想在一个并行的for循环中打印出循环已经完成的迭代次数。
这是一种安全的方式吗,和/或有更好的方式?
a = SharedArray(Int, 10)
counter = SharedArray(Int, 1)
arr = 1:10
tot = length(arr)
@parallel for i in collect(arr)
a[i] = i
counter[1] += 1
println("$i/$tot")
sleep(rand()) # simulate a variable amount of computatio
我基本上是想解决这个问题:
我想用他们的恭维词替换A,C,G,T的所有词句。换句话说,所有的A都将被T所取代,所有的C都将被G等所取代。
我以前曾使用replace()函数将所有出现的'T‘替换为'U’,并希望替换函数将使用一个字符列表来替换为另一个字符列表,但我无法使它工作,因此它可能没有这种功能。
我知道我可以很容易地使用BioJulia包来解决这个问题,并且已经使用了以下方法:
# creating complementary strand of DNA
# reverse the string
# find the complementary nucleotide
us
我们可以在julia中迭代两个或两个以上的向量或元组吗?
julia> c=Tuple(x for x in a, b)
以上代码不起作用,但显示了我想要做的事情。我需要一个接一个地遍历a和b。
假设,
julia> a=(1,2)
julia> b=(3,4)
我想让C:
julia> c=(1,2,3,4)
当我尝试以下代码片段时,我发现找不到变量i。为什么会这样呢? function evalMyExpr(expr,n)
for i in 1:n
eval(expr)
end
end
expr1 = Meta.parse("println(\"hello\")")
expr2 = Meta.parse("println(string(i))")
evalMyExpr(expr1,2) # ok
evalMyExpr(expr2,2) # UndefVarError: i not defined 请注意,如果我在宏中转换它,它可
请参见Python代码,用于在给定的两个数字之间查找下端和上部的素数:
lower = 3
upper = 15
print("Prime numbers between", lower, "and", upper, "are:")
for num in range(lower, upper + 1):
for i in range(2, num):
if (num % i) == 0:
break
else:
print(num)
Python输出:
Prime numbers
这是一个可能是土耳其方言的周二拼写错误的单词:"Çkinci gÜn"。拼写对这个问题不重要。我的问题是这个:
s = "Çkinci"
srev = reverse(s)
for i in 1:length(srev)
println(srev[i])
end
很管用,但是
for i in 1:length(s)
println(s[i])
end
第二个字母上的错误。事实上,圣kinci,而不是它的反向字符串,不能在第2位置的字母k处索引。
有人知道为什么吗?“k”是Unicode转义序列还是什么?
这个问题是,用于从宏内部的表达式构建表达式。然而,当引用整句话的时候,情况就有点像卡车司机了。例如,我想构建表达式:(name=val)。以下内容如下:
macro quotetest(name,val)
quote
nm = Meta.quot($(QuoteNode(name)))
v = Meta.quot($(QuoteNode(val)))
println(nm); println(typeof(nm))
println(v); println(typeof(val))
end
end
@quotetest x 5 # Test case:
我用的是Mac电脑。假设我在终端中打开Julia (REPL)。然后我输入ctrl+d并获取
[Process Completed]
那我就不能再使用终端窗口了!有没有办法“重置”窗口,或者我必须打开一个新的?如果我运行一个简单的程序,也会发生这种情况:
$ echo 'println(PROGRAM_FILE); for x in ARGS; println(x); end' > script.jl
$ julia script.jl foo bar
script.jl
foo
bar
[Process completed]
编辑:为了澄清这个问题:我可以输入pyth
如何通过在每次迭代中添加0.2来确保得到正确的结果?
some = 0.0
for i in 1:10
some += 0.2
println(some)
end
上面的代码给了我
0.2
0.4
0.6000000000000001
0.8
1.0
1.2
1.4
1.5999999999999999
1.7999999999999998
1.9999999999999998
我想写一个简单的宏来显示变量的名称和值。在公共场合,Lisp应该是
(defmacro dprint (&rest vars)
`(progn
,@(loop for v in vars
collect `(format t "~a: ~a~%" ',v ,v))))
在“朱莉娅”中,我写这篇文章有两个问题:
如何将生成的Expr对象收集到块中?(在Lisp中,这是通过将列表与,@连接到progn中来完成的。)我能想到的最好的方法就是创建一个Expr(:block),并将它的args设置为列表,但这还远远不够优雅。
我
我想将抽象类型的方法扩展为具体类型。我可以用一种新的方法来完成这个任务,但是这会带来更多的复杂性:
abstract type AbstractTask end
function complete(task::AbstractTask)
complete_concrete_task(task)
println("Done!")
end
struct Task <: AbstractTask
name::String
end
complete_concrete_task(task::Task) = println(task.name)
coding
如果你有两个模块,A和B,其中应该包含两个函数bar和baz,这两个函数相互依赖,这可以通过首先将函数声明为空,然后添加方法来实现:
module Wrapper
module A
const x = 1
function bar end
end # module A
module B
const x = 2
function baz end
end # module B
import .A: bar
import .B: baz
bar(expr) = quote
println("bar", $(B.x))
$expr
end
b
我有以下变量
a1 = 2
a2 = 20
a3 = 200
在遍历整数1、2和3时,可以输出它们吗?如下所示,虽然它不像预期的那样工作
for i in [1,2,3]
println(:"a$i") # doesn't work
println("a" * string(i)) # doesn't work
end
我目前正在使用的版本1.1.0上的 for redirect_stdout似乎没有给出如何使用该函数的示例。也许我错过了?
我希望捕获println的输出,并将其作为字符串返回。
下面是一个示例:
julia> VERSION
v"1.1.0"
julia> (rd, wr) = redirect_stdout();
julia> println("This is a test.")
julia> # Get back the string "This is a test."
julia> # s = do_
在C++中,我可以执行以下操作:
class foo {
private:
int N;
public:
foo(const int pN) {
N = pN;
std::cout << N << std::endl;
}
};
或者,考虑到朱莉娅中的外部构造者的概念,
class foo {
private:
int N;
};
foo::foo(const int pN) {
N = pN;
std::cout << N << std::endl;
}
你能在Julia中做同样的事情吗