小编Con*_*nor的帖子

Julia 可变结构中的变量字段名

我希望能够使用变量从 Julia 中的可变结构中获取字段。

例如

mutable struct myType
    my_field1::Int = 1
    my_field2::Int = 2
    my_field3::Int = 3
end
Run Code Online (Sandbox Code Playgroud)

然后让我们假设您使用以下命令声明此结构的特定实例 struct_instance = myType()

如何以可变方式从这个可变结构的实例中提取字段的值?

假设您想使用 for 循环将 my_struct.field[X] 的值分配给变量,以便您当前访问的特定字段取决于变量 X:

foo = zeros(Int64, 3)
for X = 1:3
    foo(X) = struct_instance.field[X]
end
Run Code Online (Sandbox Code Playgroud)

我不知道如何实际实现上面的 for 循环——我上面写的只是上面的伪代码。在 MATLAB 中,您将使用以下符号,例如:

foo = zeros(1,3)
for x = 1:3
    foo(x) = struct_instance.(sprintf('field%d',x))
end
Run Code Online (Sandbox Code Playgroud)

提前致谢。

struct field-names julia

4
推荐指数
2
解决办法
547
查看次数

Julia:计算数组数组中元素的总数

Julia 中是否有一个函数可以为您提供数组数组(或“锯齿状数组”)中的元素总数?

这就是我的意思:

my_array_of_arrays = [ [1, 5], [6], [10, 10, 11] ] 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个desired_function(my_array_of_arrays)可以返回的函数 6

如果不是,那么在 Julia 中最快的方法是什么?

提前致谢!

arrays jagged-arrays julia arrayofarrays

4
推荐指数
1
解决办法
221
查看次数

在 Julia 中绘制 ForwardDiff 的输出

我只想使用该ForwardDiff.jl功能来定义一个函数并绘制其梯度(使用 评估ForwardDiff.gradient)。它似乎不起作用,因为 的输出ForwardDiff.gradient是这种奇怪的Dual类型,并且不容易转换为所需的类型(在我的情况下,是 Float32s 的一维数组)。

using Plots
using ForwardDiff

my_func(x::Array{Float32,1}) = 1f0. / (1f0 .+ exp(3f0 .* x)) # doesn't matter what this is, just a sigmoid function here

grad_f(x::Array{Float32,1}) = ForwardDiff.gradient(my_func, x)

x_values = collect(Float32,0:0.01:10)

plot(x_values,my_func(x_values)); # this works fine

plot!(x_values,grad_f(x_values)); # this throws an error
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

ERROR: MethodError: no method matching Float64(::ForwardDiff.Dual{ForwardDiff.Tag{typeof(g),Float32},Float64,12})
Run Code Online (Sandbox Code Playgroud)

当我检查 的类型时grad_f(x_values),我得到了这个:

Array{Array{ForwardDiff.Dual{ForwardDiff.Tag{typeof(g),Float32},Float32,12},1},1}

例如,为什么在 ForwardDiff 文档的示例中不会发生这种情况?见这里:https : //github.com/JuliaDiff/ForwardDiff.jl

提前致谢。

编辑:在 Kristoffer Carlsson 发表评论后:我试过这个,但它仍然不起作用。我不明白我在这里尝试的与他建议的有什么不同:

function g(x::Float32) …
Run Code Online (Sandbox Code Playgroud)

type-conversion automatic-differentiation julia autodiff

3
推荐指数
1
解决办法
112
查看次数

Julia:跨矩阵行广播`findfirst()`

我想在满足某个条件的矩阵的每一行中找到第一个值的索引。我想弄清楚如何在不使用数组推导式的情况下做到这一点。

这就是我将如何使用数组理解来做到这一点:

# let's say we want to find the first column index, per row, where a number in that row is below some threshold.

threshold = 0.5;
data = randn(50,100);

first_threshold_crossings = [findfirst(data[i,:]<threshold) for i in 1:size(data,1)];

Run Code Online (Sandbox Code Playgroud)

生成一个索引列表,告诉您每行的位置(按列)从左到右首先下降到阈值以下的值。

你能想象这样做的任何更快的方法吗?

broadcast multidimensional-array logical-operators julia array-broadcasting

1
推荐指数
1
解决办法
180
查看次数