我最近在Julia编写脚本,并使用setindex遇到了问题!我在任何文档中找不到答案的函数(我也搜索过stackoverflow,但找不到答案 - 如果我的搜索不够好而且我正在重复一个问题,我很抱歉。)
我收到与设置索引有关的MethodError,其代码类似于以下代码(此代码中也出现错误,只是为了简化而改变):
a = 0:0.01:1
a = 2 * pi * (a - 0.4)
a[abs(a) .> pi] += - sign(a[a .> pi]) * 2 * pi
我意识到在上面的代码中,我可以通过简单地改变用于生成a的初始表达式来实现类似的效果,使得它的大小永远不会大于pi,但在原始代码中,由于未包含的中间步骤 - 此外,无论是否可能出现此特定问题,都会有其他使用setindex的实例!同样,我希望有一个解决方案。
我尝试使用整数索引而不是逻辑索引,并尝试将逻辑索引或整数索引存储为另一个值。两者都没有奏效。我猜这是来自我的一个相当基本的误解,但认为这将是一个很好的帮助资源。
提前致谢
答案 0 :(得分:3)
您尚未将FloatRange
具体化为Array
,因此目前还没有任何指数可供使用。它只是一个类似范围的对象:
julia> a = 0:0.01:1
0.0:0.01:1.0
julia> a = 2 * pi * (a - 0.4)
-2.5132741228718345:0.06283185307179587:3.769911184307752
julia> dump(a)
FloatRange{Float64}
start: Float64 -251.32741228718345
step: Float64 6.283185307179586
len: Float64 101.0
divisor: Float64 100.0
与:比较:
julia> a = [a]
101-element Array{Float64,1}:
-2.51327
-2.45044
-2.38761
[...]
3.64425
3.70708
3.76991
之后
julia> maximum(a)
3.769911184307752
julia> a[abs(a) .> pi] += - sign(a[a .> pi]) * 2 * pi;
julia> maximum(a)
3.141592653589793
这是
之间的区别julia> 1:2:9
1:2:9
julia> [1:2:9]
5-element Array{Int32,1}:
1
3
5
7
9