小编Fen*_*ang的帖子

Julia中复合类型的自定义显示

假设您在Julia中定义了一个新的复合类型以及该类型的变量:

type MyType
  ?::Int64
  ?::Vector{Float64}
  ?::Float64

  MyType(?::Int64, ?::Vector{Float64}, ?::Float64) = new(?, ?, ?)
end
mt = MyType(5, [1.2, 4.1, 2], 0.2)
Run Code Online (Sandbox Code Playgroud)

现在,如果您处于REPL模式,只需mt输入mt并按Enter 即可查看值:

mt
MyType(5,[1.2,4.1,2.0],0.2)
Run Code Online (Sandbox Code Playgroud)

如果我想自定义MyType显示变量的方式,我可以定义一个函数并使用它customized_display(mt):

function customized_display(me::MyType)
  println("MyType")
  println("?:$(me.?), ?:$(me.?), ?:$(me.?)")
end

customized_display(mt)
MyType
?:5, ?:[1.2,4.1,2.0], ?:0.2
Run Code Online (Sandbox Code Playgroud)

但是使用另一个显示值的函数mt似乎是多余的.我需要扩展哪个功能,只需输入mt,就会显示自定义显示?

read-eval-print-loop julia

7
推荐指数
2
解决办法
208
查看次数

一次访问一些数组并循环到开头

我有一个简单的问题应该有一个简单的答案,但我还没想到它.我想一次处理一个数组,一定数量的元素,然后回绕到开头.

这是一个图表,显示n每次需要10和3个元素时:

迭代3一次

到目前为止,我尝试编写一个简单的迭代失败了:使用% n给我零,这不适用于Julia的一个索引...... :)

arrays iteration julia

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

如何创建用于在 Julia 中创建符号的宏

我试图在 Julia 中创建一个字符串文字宏来创建一个symbol,所以它s"x":x. 这是行不通的:

julia> macro s_str(p)
           symbol(p)
       end

julia> s'x'
ERROR: s not defined

julia> s"x"
ERROR: x not defined
Run Code Online (Sandbox Code Playgroud)

macros julia

6
推荐指数
3
解决办法
1233
查看次数

在球拍中转置矩阵(列表列表

我有一个球拍列表清单,必须转置它们.

(: transpose ((list-of(list-of %a)) -> (list-of (list-of %a))))

(check-expect (transpose (list (list 1 2 3)
                               (list 4 5 6)))
              (list (list 1 4)
                    (list 2 5)
                    (list 3 6)))

(define transpose
  (lambda (xs)
    (cond
      ((empty? xs)empty)
      ((pair? xs)(make-pair  (make-pair (first(first xs))  (make-pair (first(first(rest xs)))empty)) (transpose (rest(rest xs))))))))
Run Code Online (Sandbox Code Playgroud)

那是我目前的代码.我认为问题在于递归调用(如果我错了请纠正我).

实际结果是(list (list 1 4)).其余的似乎有点被忽视了.

如果有人知道这个问题,或者有小费,这对我有帮助.

scheme transpose list matrix racket

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

键入不稳定和工厂构造函数

说,我有一个类型层次结构

abstract A
immutable B <: A end
immutable C <: A end
Run Code Online (Sandbox Code Playgroud)

A以下工厂模式的构造函数:

function A(x::Int)
    if x > 0
        B()
    else
        C()
    end
end
Run Code Online (Sandbox Code Playgroud)

它根据预期的输入返回不同的子类型.但是,它也是类型不稳定,因为我找不到强制返回类型的方法A.

那么,这里有工厂模式是不是很糟糕?类型不稳定性是否仅影响不可变类型而不是可变类型,因为后者无论如何都是引用类型.

我必须为此选择参数类型吗?

immutable D{T <: A}
    type::T
end

function D(x::Int)
    if x > 0
        D(B())
    else
        D(C())
    end
end
Run Code Online (Sandbox Code Playgroud)

感觉有点糟糕.

实际上,类型不稳定的功能有多糟糕?是否值得交易以获得更好的代码可读性?

或者,我应该定义typealias A Union{B,C}吗?

julia type-stability

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

稀疏矩阵的 JuMP?

如何处理JuMP中的稀疏矩阵?

例如,假设我想施加以下形式的约束:

A * x == 0
Run Code Online (Sandbox Code Playgroud)

其中A是稀疏矩阵和x变量向量。我认为A可以利用 的稀疏性来加快优化速度。我如何在 JuMP 中利用这一点?

julia julia-jump

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

Julia似乎没有使用字符串来执行插值

官方文件说:

连接和字符串插值调用string()将对象转换为字符串形式

但是,以下最低工作示例似乎证明了其他情况:

type MyType
    x::Int
end
import Base.string
Base.string(m::MyType) = "world"
m = MyType(4)
println("hello $m")
println("hello " * string(m))
Run Code Online (Sandbox Code Playgroud)

第二行最后一行评估为hello MyType(4)REPL,而最后一行评估(按预期)为hello world.

那么我做错了什么?

(我仍然在v0.4,但官方文档版本表明不应该有任何区别.)

string string-interpolation julia

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

在Julia中估计概率分布并从中抽样

我试图使用Julia估计使用N个观察数据点(存储为Float64数字数组)的连续单变量分布,然后从该估计分布中进行采样.我没有先前的知识限制对某些发行家族的关注.

我正在考虑使用KernelDensity包来估计分布,但我不确定如何从结果输出中进行采样.

任何帮助/提示将不胜感激.

distribution kernel-density julia

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

返回数字的奇数位之和

对于类,我必须编写一个函数,该函数接受正整数 n 并返回方案中 n\xe2\x80\x99s 奇数位的总和。到目前为止,我的基本情况是,如果 n 等于 0,则 0。但我不确定如何继续。

\n\n
(define sumOddDigits\n     (lambda (n)\n       (if (= n 0)\n           0\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试用例:

\n\n
(sumOddDigits 0) \xe2\x86\x92 0\n(sumOddDigits 4) \xe2\x86\x92 0\n(sumOddDigits 3) \xe2\x86\x92 3\n(sumOddDigits 1984) \xe2\x86\x92 10\n
Run Code Online (Sandbox Code Playgroud)\n

racket

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

错误:方法错误:没有方法匹配零(::Type{Any})

我对朱莉娅很陌生。我正在尝试求解非线性方程组以找到向量 ( p_new)。下面是我的问题的简化版本。问题是我收到此消息:"ERROR: MethodError: no method matching zero(::, Type{Any})"。我不确定是否是因为初始条件没有明确定义。提前致谢!

p_1 = [ 1, 2, 2.3]
p_1b = [ 1, 2.2, 2.5]
mgc = [1, 1, 0.5]
theta = 0.8
OW1 = [0 1 0; 1 1 1; 0 0 1]
g = ones(3,1)
function pupdate!(p_1,mgc,theta,OW1)
    delt = p_1.*theta
    delt = 2.718281828459.^delt
    Sp1 = sum(delt)
    sp1 = delt./Sp1
    markup = p_1 .- mgc 
    sp1 .= markup
end
g0 = [p_1b, mgc, theta, OW1]
p_new = nlsolve(pupdate!, g0)   
Run Code Online (Sandbox Code Playgroud)

nonlinear-functions julia

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