小编Ale*_*lec的帖子

使用Mathematica中的函数式编程计算列表中元素之间的百分比差异?

这源于一个相关的讨论,如何使用Mathematica中的函数编程减去列表中的特定元素?

如何轻松计算列表中值之间的百分比差异?

链接的问题使用差异来轻松计算列表中连续元素之间的绝对差异.无论内置的差异函数容易出现这个特殊问题,它仍然存在如何执行不同操作的问题.

正如我之前提到的,我现在希望计算百分比差异.给定一个元素列表{value1, value2, ..., valueN},如何执行类似于(value2-value1)/value1所述列表的操作?

我已经尝试找到一种方法来使用SlotSlotSequence隔离特定元素,然后将自定义函数应用于它们.这是做这样事情的最有效方式(假设有一种方法可以隔离元素并对它们执行操作)?

functional-programming wolfram-mathematica list

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

`map` 相当于 2d 列表理解

在 1d 中,我可以使用以下任一方法:

[i for i in 1:5] 
Run Code Online (Sandbox Code Playgroud)

或者

map(1:5) do i 
    i
end
Run Code Online (Sandbox Code Playgroud)

两者都产生

[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

有没有办法map在更高维度上使用?例如复制

[x + y for x in 1:5,y in 10:13] 
Run Code Online (Sandbox Code Playgroud)

产生

5×4 Array{Int64,2}:
 11  12  13  14
 12  13  14  15
 13  14  15  16
 14  15  16  17
 15  16  17  18
Run Code Online (Sandbox Code Playgroud)

list-comprehension julia

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

在 Julia 中,为什么在两个元素的元组上使用 Pair?

我什么时候应该在两个元素的元组上使用 Pair ,反之亦然?

types tuples julia

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

使用“Base.@kwdef”广播结构创建

如果我有一个大型结构体,我想创建一个数组(例如稍后创建一个StructArray),那么当我有关键字默认值时,如何创建一个结构体数组。

例如

Base.@kwdef struct MyType
  a = 0
  b = 0
  c = 0
  d = 0
  ... # can be up to 10 or 20 fields
end
Run Code Online (Sandbox Code Playgroud)

Base.@kwdef很好,因为我可以使用创建对象MyType(b=10,e=5),但有时我有参数数组。我希望能够广播或简洁地构造一个结构数组。

也就是说,我希望以下内容创建一个由三个组成的数组MyTypeMyType.(c=[5,6,7],d = [1,2,3])

相反,它创建单个MyTypewherecdare 数组而不是标量值。

Base.@kwdef有哪些方法可以保持结构体构造的便利性和简单性?

julia

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

使用 Lazy.jl 在 Julia 中生成惰性范围

在尝试扩展Lazy.jl 中的一个示例时,我遇到了评估不是惰性的问题。

README使用这个例子:

> esquares = @>> Lazy.range() map(x->x^2) filter(iseven);

> esquares[99]
39204
Run Code Online (Sandbox Code Playgroud)

我试图通过允许将过滤器指定为参数来使其动态化,但它最终评估了一个无限列表:

> squares(filt) = @lazy @>> Lazy.range() map(x->x^2) filter(filt); 

> squares(iseven)

(4 16 36 64 100 144 196 256 324 400 484 576 676  ...   # this keeps printing until interrupting...)
Run Code Online (Sandbox Code Playgroud)

我也试过:

> @lazy squares(iseven)  
(4 16 36 64 100 144 196 256 324 400 484 576 676  ...   # this also immediately returns the infinite list
Run Code Online (Sandbox Code Playgroud)

functional-programming lazy-evaluation julia

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

如何将命名元组字段提升为变量和关联值?

我有一个包含许多参数的模型,我将它们作为命名元组传递。有没有办法将值提升到我的函数中的变量范围?

\n
parameters = (\n    \xcf\x84\xe2\x82\x81 = 0.035,   \n    \xce\xb2\xe2\x82\x81 = 0.00509, \n    \xce\xb8 = 1,\n    \xcf\x84\xe2\x82\x82 = 0.01,    \n    \xce\xb2\xe2\x82\x82 = 0.02685,\n    ... \n)\n
Run Code Online (Sandbox Code Playgroud)\n

然后像现在这样使用:

\n
function model(init,params) # params would be the parameters above\n    foo = params.\xce\xb2\xe2\x82\x81 ^ params.\xce\xb8 \nend\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法(marco?)直接将参数放入我的变量范围,以便我可以执行此操作:

\n
function model(init,params) # params would be the parameters above\n    @promote params # hypothetical macro to bring each named tuple field into scope\n    foo = \xce\xb2\xe2\x82\x81 ^ \xce\xb8 \nend\n
Run Code Online (Sandbox Code Playgroud)\n

后者通过一些数学密集型代码看起来要好得多。

\n

julia

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

如何在 Julia 中创建动态命名的测试集?

使用 Julia 的 Test 包,如何创建@testset在运行时引用值的 s?

例如我有

test_data = [
   (model="a",datapath="models/a.json"),
   (model="b",datapath="models/b.json"),
   ...
] 
Run Code Online (Sandbox Code Playgroud)

我想这样做:

@testset "models" begin
    for test in test_data
        @testset test.model begin
            
            # test range of values/functions here
        end
    end

end
Run Code Online (Sandbox Code Playgroud)

但是我收到这样的错误,我认为这是因为我试图在运行时定义测试集名称。

ERROR: LoadError: LoadError: LoadError: Unexpected argument test.model to @testset
Stacktrace:
 [1] error(::String) at .\error.jl:33
 [2] parse_testset_args(::Tuple{Expr}) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Test\src\Test.jl:1244
 [3] testset_beginend(::Tuple{Expr,Expr}, ::Expr, ::LineNumberNode) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Test\src\Test.jl:1087
 [4] @testset(::LineNumberNode, ::Module, ::Vararg{Any,N} where N) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.5\Test\src\Test.jl:1079
 [5] include(::String) at .\client.jl:457
 [6] top-level scope at C:\MyPackage\runtests.jl:7
 [7] include(::String) …
Run Code Online (Sandbox Code Playgroud)

testing julia

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

How to concatenate differently sized vectors in Julia?

How can I concatenate arrays of different size with a "filler" value where the arrays don't line up?

a = [1,2,3]
b = [1,2]
Run Code Online (Sandbox Code Playgroud)

And I would like:

[1 2 3
 1 2 missing]
Run Code Online (Sandbox Code Playgroud)

Or

[1 2 3
 1 2 nothing]
Run Code Online (Sandbox Code Playgroud)

arrays vector concatenation julia

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

在 Julia 中,如何迭代 Dataframe 列和名称?

您可以使用以下方法迭代列:

for c in eachcol(dataframe)
   ...
end
Run Code Online (Sandbox Code Playgroud)

其中c是该列中值的向量。

如何迭代并获取列的名称和该列中的值?

iterator dataframe julia

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

如何获取数据框组的名称?

当迭代 a 时GroupedDataFrame,如何获取组的名称/键?

例如,访问a每个组的相等值:

df = DataFrame(a=repeat([1, 2, 3, 4], outer=[2]),
                      b=repeat([2, 1], outer=[4]),
                      c=1:8);

gd = groupby(df, :a)

for g in gd
   #... do something with the dataframe and the key of the dataframe
end
Run Code Online (Sandbox Code Playgroud)

dataframe julia

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