我有一个想要打印的数组或矩阵,但只能打印到三位数的精度。我该怎么做呢。我尝试了以下方法。
> @printf("%.3f", rand())
0.742
> @printf("%.3f", rand(3))
LoadError: TypeError: non-boolean (Array{Bool,1}) used in boolean context
while loading In[13], in expression starting on line 1
更新:理想情况下,我只想调用像printx("{.3f}", rand
我在julia做一个模拟,我需要一个实时变化的热图。我正在使用PyPlot,并尝试对julia采用此作为
1 using PyPlot
2
3
4 ion()
5 fig = figure()
6 ax = fig[:add_subplot](111)
7 img = ax[:imshow](rand(50,50))
8 show()
9
10 # draw some data in loop
11 for i in 1:10
12 # wait for a second
13 sleep(1)
14 # replace
考虑生成N随机数的基本迭代,并将它们保存在数组中(假设我们对数组的理解不感兴趣,也不知道调用的rand(N))
function random_numbers(N::Int)
array = zeros(N)
for i in 1:N
array[i] = rand()
end
array
end
我对一个类似的功能感兴趣,它利用我的笔记本电脑的核心来生成相同的阵列。我已经检查了,其中引入了宏@everywhere、@spawn和@parallel,但是在那里计算是“动态的”,并且不需要一个数组来保存数据。
我的印象是,这是非常基本的,可以很容易地使用函数pmap,但我不熟悉并行计算。
我需要在朱莉娅中获得一个介于1和BigInt之间的随机数,但是我无法在文档中找到如何做到这一点。下面的代码是我认为有用的代码:
julia> rand(BigInt(1):BigInt(2^1000))
ERROR: integer division error
in randu at random.jl:158
in rand at random.jl:178
in rand at random.jl:187
编辑:GregS提到2^1000将环绕零。实际上,2^1000的结果是零,所以上面的代码是错误的。但是使用BigInt(2)^1000不起作用:
julia> ran
在Julia中,有没有一种方法可以概括出如下所示的模式? function compute_sum(xs::Vector{Float64})
res = 0
for i in 1:length(xs)
res += sqrt(xs[i])
end
res
end 这会计算每个向量元素的平方根,然后对所有内容求和。它比具有数组理解或map的“朴素”版本快得多,而且也不分配额外的内存: xs = rand(1000)
julia> @time compute_sum(xs)
0.000004 seconds
676.8372556762
我尝试使用R包clustMixType中的kproto()函数来集群Julia中的混合类型数据,但是我得到了错误No numeric variables in x! Try using kmodes() from package...。我的数据应该有3个变量:2个连续变量和1个分类变量。似乎在我使用DataFrame()之后,所有的变量都变得明确了。有没有一种方法可以避免在使用DataFrame()之后更改变量类型,以便使用kproto()具有混合类型的数据(连续数据和分类数据 using RCall
@rlibrary clustMixType
# group 1 variables
x
我试图用以下代码段在julia中生成12个字符的字母数字字符串:
a)
an = randstring(rand(Bool) ? ('A':'Z') : ('0':'9'), 12)
b)
an = ""
for i in [1:12]
an *= randstring(rand(Bool) ? ('A':'Z') : ('0':'9'))
end
但两者要么给出完整的12位数字,要么给出12个字母,但不给出它们的组合。
请指导我生成12个字
我正在尝试优化这个循环的速度和分配
function loop(n,k)
m = rand(10,n)
r = rand(10,1)
for j in 1:k
for i in 2:size(m,2)
@inbounds m[:,i-1] = m[:,i] + rand!(r)
end
end
end
内存分配非常大:@time loop(10000,30)的内存分配为599.94k,在k中不断增加。我认为有两个因素:(1) m[:,i]的分配和(2) m[:,i-1]的分配。我希望@inbounds能帮上
我还有一个关于朱莉娅垃圾收集的问题。下面是一个很小的例子:
function OscarTheGrouch()
A = rand(Float32, 20000, 20000);
A = 0;
gc();
end
调用OscarTheGrouch()会使内存使用量增加1.6GB。调用gc()之后,它将下降1.6GB。
相反,只需在全局范围内执行函数中的代码,即执行
A = rand(Float32, 20000, 20000);
A = 0;
gc();
在执行之前和之后,RAM的使用保持不变。
被证明只是由于中间结果以ans形式存储的事实。但是,调用whos()后调用O
我们在count_heads.jl中有一个函数:
function count_hands(n)
c::Int=0
for i=1:n
c+=rand(Bool)
end
c
end
我们以./julia -p 2的形式运行朱莉娅,我们想在不同的过程中计算a和b,我们有:
julia> @everywhere include("count_hands.jl")
julia> a=@spawn count_hands(1000000000)
julia> b=@spawn count_hands(100000000
我有一个函数返回一个二维数组。如果我map这个函数到一个UnitRange,我得到一个二维数组的一维数组。有没有一种简洁的方法把这个收集到一个三维数组中?
y = rand(3,3)
f(x) = y * x
map(f, 1:9)
这将导致9-element Array{Array{Float64},2}而不是Array{Float64,3}。这也是通过理解来实现的。
在Julia中,我有两个函数来确定π的数值。第二个函数(我认为它是向量化的)比第一个函数慢。为什么矢量化比较慢?什么时候要矢量化,什么时候不应该有规则吗?
function determine_pi(n)
area = zeros(Float64, n);
sum = 0;
for i=1:n
if ((rand()^2+rand()^2) <=1)
sum = sum + 1;
end
area[i] = sum*1.0/i;
end
return area
end
我想要浅层复制一个结构,只复制值,但保留其中的集合引用。但是它似乎没有内置的方法:
julia> mutable struct S
x
y
end
julia> a = S(1, rand(2))
S(1, [0.792705, 0.582458])
julia> b = deepcopy(a)
S(1, [0.792705, 0.582458])
julia> b.y === a.y
false
julia>
julia> b = copy(a)
ERROR: MethodError:
我编写了一个估计pi的函数picircle()。
现在,我想为N个值绘制这个函数。
function Plotpi()
p = 100 # precision of π
N = 5
for i in 1:N
picircle(p)
end
end
3.2238805970149254
3.044776119402985
3.1641791044776117
3.1243781094527363
3.084577114427861
现在我不知道如何绘制函数,我尝试了plot(PP()),但是它没有工作
在这里,我定义了皮环:
function picircl
有等同于Python的pop吗?我有一个数组x和一个长度相同的布尔数组flag。我希望提取x[flag]并能够将其存储在变量x_flagged中,同时将它们从x中删除。
x = rand(1:5, 100)
flag = x .> 2
x_flagged = some_function!(x, flag) # Now x would be equal to x[x .<= 2]
我正在尝试将函数f(x::Array{Float64, 1}) -> Array{Float64, 2}应用于Julia中的m x n数组中的每一行(如果相关的话,我使用的是v1.1 )。
现在,我希望可以简单地应用mapslices,如下所示:
# toy example of f
f = (x -> randn(length(x), length(x)))
A = randn(100, 50)
# intent: apply f to every row in A and collect the result into a 100 x 50 x 50 matrix.
resu