a= zeros(4,4)
Run Code Online (Sandbox Code Playgroud)
a像这样打印
> 4×4 Array{Float64,2}:
> 0.0 0.0 0.0 0.0
> 0.0 0.0 0.0 0.0
> 0.0 0.0 0.0 0.0
> 0.0 0.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
但println(a)像这样打印
[0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0; 0.0 0.0 0.0 0.0]
Run Code Online (Sandbox Code Playgroud)
如何a在函数中以前一种方式“打印” ?我想要它用于调试目的。
我是朱莉娅的新手.我主要在python中编程.
在python中,如果要迭代一大组值,通常会构造一个所谓的生成器来节省内存使用量.这是一个示例代码:
def generator(N):
for i in range(N):
yield i
Run Code Online (Sandbox Code Playgroud)
我想知道朱莉娅是否有类似的东西.阅读julia手册后,@ task macro似乎与python中的生成器具有相同(或类似)的功能.然而,经过一些实验,在julia中,内存使用量似乎比通常的数组大.
我@time在IJulia中使用来查看内存使用情况.这是我的示例代码:
[更新]:添加generator方法代码
(generator方法)
function generator(N::Int)
for i in 1:N
produce(i)
end
end
Run Code Online (Sandbox Code Playgroud)
(发电机版)
function fun_gener()
sum = 0
g = @task generator(100000)
for i in g
sum += i
end
sum
end
Run Code Online (Sandbox Code Playgroud)
@time fun_gener()
已用时间:0.420731828秒(已分配6507600字节)
(阵列版)
function fun_arry()
sum = 0
c = [1:100000]
for i in c
sum += i
end
sum
end
Run Code Online (Sandbox Code Playgroud)
@time fun_arry()
已用时间:0.000629629秒(已分配800144个字节)
谁能告诉我为什么@task在这种情况下需要更多空间?如果我想将内存使用量保存为处理大量值,我该怎么办?
当我创建一些数组A并将其分配给B时
A = [1:10]
B = A
Run Code Online (Sandbox Code Playgroud)
我可以修改A,更改反映在B中
A[1] = 42
# B[1] is now 42
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用标量变量执行此操作,则更改不会传播:
a = 1
b = a
a = 2
# b remains being 1
Run Code Online (Sandbox Code Playgroud)
我甚至可以将事物混合起来并将矢量转换为标量,并且变化不会传播:
A = [1:10]
B = A
A = 0
# B remains being 1,2,...,10
Run Code Online (Sandbox Code Playgroud)
=运营商究竟做了什么?当我要复制的变量和修改旧的保存新变量的完整性,当我应该使用b = copy(a)经过短短b=a?
是否有适用于Julia的类似Python的virtualenv环境模拟器,可以在本地虚拟环境中进行开发?
我已经在文档和论坛中徘徊了一段时间,我还没有找到一个内置的方法/函数来完成删除数组中元素的简单任务.有这样的内置功能吗?
我要求相当于python的list.remove(x).
这是一个天真地从框中选择一个函数的例子:
julia> a=Any["D","A","s","t"]
julia> pop!(a, "s")
ERROR: MethodError: `pop!` has no method matching
pop!(::Array{Any,1}, ::ASCIIString)
Closest candidates are:
pop!(::Array{T,1})
pop!(::ObjectIdDict, ::ANY, ::ANY)
pop!(::ObjectIdDict, ::ANY)
...
Run Code Online (Sandbox Code Playgroud)
这里提到使用 deleteat!,但也不起作用:
julia> deleteat!(a, "s")
ERROR: MethodError: `-` has no method matching -(::Int64, ::Char)
Closest candidates are:
-(::Int64)
-(::Int64, ::Int64)
-(::Real, ::Complex{T<:Real})
...
in deleteat! at array.jl:621
Run Code Online (Sandbox Code Playgroud) 我想更改Julia中的Package目录.默认是
"~/.julia/v0.4"
Run Code Online (Sandbox Code Playgroud)
我想移动它/opt/julia/v0.4/.理想情况下,我想将已安装的软件包移动~/.julia/v0.4到新位置.但如果不可能,我可以重新安装它们.
我需要做什么?
我有许多小函数我想内联,例如测试某些条件的标志:
const COND = UInt(1<<BITS_FOR_COND)
function is_cond(flags::UInt)
return flags & COND != 0
end
Run Code Online (Sandbox Code Playgroud)
我也可以做一个宏:
macro IS_COND(flags::UInt)
return :(flags & COND != 0)
end
Run Code Online (Sandbox Code Playgroud)
我的动机是我正在使用的C代码中的许多类似的宏函数:
#define IS_COND(flags) ((flags) & COND)
Run Code Online (Sandbox Code Playgroud)
我反复计时使用@inline定义的函数,宏,函数和表达式,但是在许多运行中没有一个比其他函数更快.1)和3)中函数调用的生成代码比4)中的表达式长得多,但我不知道如何比较2)因为@code_llvm等等不适用于其他宏.
1) for j=1:10 @time for i::UInt=1:10000 is_cond(i); end end
2) for j=1:10 @time for i::UInt=1:10000 @IS_COND(i); end end
3) for j=1:10 @time for i::UInt=1:10000 is_cond_inlined(i); end end
4) for j=1:10 @time for i::UInt=1:10000 i & COND != 0; end end
Run Code Online (Sandbox Code Playgroud)
问题:目的是@inline什么?我从稀疏文档中看到它将符号附加:inline到表达式:meta,但这究竟是做什么的呢?有没有理由更喜欢这种任务的函数或宏? …
我有一个Julia模块,我需要从我的python代码库接口.为此我pyjulia就是这样使用的.
import julia
j = julia.Julia()
j.include('./simulation/n-dof/dynamics.jl')
j.using("Dynamics")
print(j.sim([1,2,3],[1,2,3]))
Run Code Online (Sandbox Code Playgroud)
然而,由于Julia需要编译我正在使用的模块,这会减慢一切.
我使用的模块导出1个函数,并在内部ForwardDiff用于某些计算.它计算动态系统的导数.在可预见的未来,该模块很可能不会发生变化.我一直在阅读__precompile()__,PackageCompiler.jl但我不太了解内部工作原理以及如何使用它.
那么有没有办法在Julia系统映像中缓存模块(据我所知,这就是为什么干净的Julia启动很快)?或者将它编译为二进制文件然后以某种方式通过python调用它更好?我需要能够将参数传递给导出的函数.
我用于测试的动力学模块的一个例子:
module Dynamics
function sim(a,b)
return 1
end
export sim
end
Run Code Online (Sandbox Code Playgroud) 有一个函数,需要三个参数.
f(a, b, c) = # do stuff
Run Code Online (Sandbox Code Playgroud)
还有另一个返回元组的函数.
g() = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
如何将元组作为函数参数传递?
f(g()) # ERROR
Run Code Online (Sandbox Code Playgroud) Julia中的DataFrame类型允许您以数组形式访问它,因此可以通过索引删除列:
df = df[:,[1:2,4:end]] # remove column 3
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是我经常只知道列的名称,而不知道表中的列索引.
有没有按名称删除列的内置方法?
或者,有没有比这更好的方法呢?
colind = findfirst(names(df), colsymbol)
df = df[:,[1:colind-1,colind+1:end]]
Run Code Online (Sandbox Code Playgroud)
以上是容易出错的; 有一些边缘情况(单列,第一列,最后一列,符号不在表中等)
谢谢