我对数组的不同类型感到困惑。考虑这两个例子
a = Array{Float64}[]
push!(a,[1, 2])
push!(a,[3, 4])
push!(a,[1 2; 3 4])
b = Array[[1.0, 2.0], [3.0,4.0], [1.0 2.0; 3.0 4.0]]
我不知道a和b有什么不同。假设我打算对a或b中的每个元素运行一个for循环,并将每个元素乘以2。
for i in 1:3 a[i] = a[i]*2 end
for i in 1:3 b[i] = b[i]*2 end
我分别对两行的运行时间进行计时,但它们的运行速度是相同的。a和b是一样的吗?如
在之后,我决定用GNU对朱莉娅进行基准测试,结果与中所示的提速不一致。
我用CXXFLAGS='-std=c++11 -O3'编译了朱莉娅和got,结果如下:
a=0.9999;
tic;y=a.^(1:10000);toc
Elapsed time is 0.000159025 seconds.
tic;y=a.^(1:10000);toc
Elapsed time is 0.000162125 seconds.
tic;y=a.^(1:10000);toc
Elapsed time is 0.000159979 seconds.
--
tic;y=cumprod(o
在x = Any[[1,2],[2,3],[3,4],[4,5]]中,我使用Julia0.4.0尝试了下面的一行
x[ x .== [3,4] ]
但是它导致了一个错误
ERROR: DimensionMismatch("arrays could not be broadcast to a common size")
我希望它能给出类似Any[ [3,4] ]的东西,因为
x[3] == [3,4] # => true
没问题。虽然此操作本身可能并不有用,但我想知道错误消息意味着什么。因此,我希望有任何提示,为什么会发生这个错误。
假设我想要编写一个需要任意长度的数组作为参数输入的函数:例如,
f = function(x,y)
z = x * y
outputs = DataFrame(x = x, y = y, z = z)
return(outputs)
end
返回,f.([1,2],[1,2])是两个1x3 DataFrames的2元素数组。但是,在这个场景中,我想要一个2x3 DataFrame。
我可以通过在嵌套for循环之前定义z来实现这一点:
f = function(x,y)
z=fill(0,length(x))
for i in 1:length(x)
z[i] = x
temp=0
@elapsed for k in 1:1000
global temp+=k
end 将返回已用时间。但是如何将其保存到变量中呢? temp=0
time=@elapsed for k in 1:1000
global temp+=k
end 我想这在以前的Julia版本中是有效的?但是对于1.0.0,我得到了 cannot assign variable libc.time from module Main 另外,它对整个for循环的计时正确吗?我真的为tic和toc在1.0.0中无法使用而感到悲哀,我认为那里的逻辑更简单。
在将一个程序从Python翻译到Julia之后,我非常不满意:
对于小/非常小的输入,Python更快。
对于中等输入,Julia速度更快(但没有那么大)
对于大输入,Python更快
我认为原因是我不明白内存分配是如何工作的(在这里自动执行操作,没有CS背景)。我会在这里张贴我的代码,但它太长,太具体,它不会对任何人都有益,除了我。因此,我做了一些实验,现在我有一些问题。
考虑一下这个简单的script.jl
function main()
@time begin
a = [1,2,3]
end
end
main()
当我运行它时,我得到:
请看下面的代码。
class Use
{
public static void main(String[] args)
{
String[] result = new String[2];//{"Hello", "World"}; // compiles and run
Object[] name = result; // compiles and run
// result = name; //CE
System.out.println(result);
System.
我有以下变量
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
我正在尝试学习来自Python的朱莉娅,我在上偶然发现了一段有趣的代码。用户在创建包含函数的元组方面做了一个很好的技巧,因为它们是Julia中的一流对象。以此为基础我想尝试一些东西。
假设我有一个列表:
my_list = zip(0:3, ["wink", "double blink", "close your eyes", "jump"]) |> collect
我想要创建一个由2元素元组组成的列表,其中第二个元素是一个函数:
codes = [(i, x -> push!(x,j)) for (i,j) in m
我有一个很大的结构数组,我想创建一个引用较大数组中的结构的小数组。我如何在Julia中表达这一点? 例如,下面是我的许多Foo结构的大型数组 struct Foo
bah
end
many_foos = [Foo(i) for i in 1:100000] 下面是我希望在大数组中引用Foos的小数组 select_foos = [foo for foo in many_foos if some_condition(foo)] 我想在创建many_foos时分配一次内存,并且只为select_foos创建一个指针数组。 Julia如何创建对某物的引用,而不是复制值?如何高效地创建一个大的结
我正在尝试初始化一个具有给定大小的可空整数数组。我打算将元素添加到数组中,并能够计算数组中可空元素的数量。
然而,我注意到了以下行为。运行以下代码:
function main()
arr = Array{Nullable{Int}}(10)
res = 0
for i in 1:10
if isnull(arr[i])
res += 1
end
end
res
end
预期将返回10,但是程序几乎每次运行代码时都会返回不同的值。只初始化数组:
function main()
ar
我尝试将一个字符串添加到数组中,如下所示: arry = String[]
append!(arry, "test") 但是我得到了以下错误: Cannot `convert` an object of type Char to an object of type String 为什么我在添加字符串而不是字符时会出现这个错误? (为了其他Julia新手的利益,在下面发布我自己的答案-任何有更多有用提示的人请加入!)
我有一个字典,它有3个键,每个键都有任意的2d数组。我希望将这些值(2d数组)分配给新创建的数组。所以我写了这个:
levels = (:easy, :medium, :hard)
easy = []; medium = []; hard = [];
curriculum = Dict((k=>rand(3,3) for k in levels)...); # dictionary with 3 keys - each key is a symbol
for level in levels
eval(level) = curriculum[level]
end
在执行过程中没有问
对朱莉娅来说是个新问题,因此,很可能是个基本问题。
x = 1
function someFn()
print(x)
x = 3
end
这会在print(x)引发一个错误,因为在函数中看不到全局x。这说得通。
x = [1,2]
function someFn()
print(x)
x[1] = 4
end
print(x)
在这里,print(x)能够全局看到全局数组x和x1=4更改全局x的值。当我制作一本字典时,也会观察到类似的行为。
三个问题
是变量/数组的这种行为,它在函数中的作用域与朱莉娅应该如何工作一致?当x是数组时,它在函数中是可见的,即使不将引用作为
我正在用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&
朱莉娅0.5.1
我想要在引号中创建一个函数,在使用指定的宏之后可以使用它。这里是我的意思的一个例子
macro wat()
quote
type Foo end
global bar() = begin end
global function bar2()
end
type Baaz end
end
end
@wat
Foo()
Baaz()
bar()
bar2()
现在,当我运行这一行时,最后一行会崩溃,因为bar2是未定义的。我不明白为什么,因为在我的理解中,bar()和bar2()应该相等,而bar只是bar2的语法糖。但是,它们显然
当我发现CategoricalArrays时,我意识到我不能用Regex过滤这个向量。我查看了导出的函数,并找到了解包装函数,它似乎正常工作。为什么这不能直接起作用?还有其他的表单可以使用吗?
using CategoricalArray;DataFrame;
df=DataFrame(x=1:6,
fruit=categorical(vcat(repeat(["banana"],3),repeat(["pineapple"],3))));
df[occursin.(r"ple",df.fruit),:] #you'll get an