为啥 ArrayFloat64,1 不是 Julia 中 ArrayReal,1 的子类型?

Posted

技术标签:

【中文标题】为啥 ArrayFloat64,1 不是 Julia 中 ArrayReal,1 的子类型?【英文标题】:Why ArrayFloat64,1 is not a subtype of ArrayReal,1 in Julia?为什么 ArrayFloat64,1 不是 Julia 中 ArrayReal,1 的子类型? 【发布时间】:2019-11-06 04:43:22 【问题描述】:

我正在尝试编写一个 Julia 函数,它可以接受一维 Int64 和 Float64 数组作为输入参数。如果不定义两个版本(一个用于 Int64,另一个用于 Float64),我该如何做到这一点?

我尝试使用 ArrayReal,1 作为输入参数类型。但是,由于 ArrayInt64,1 不是 ArrayReal,1 的子类型,因此这是行不通的。

【问题讨论】:

你试过Array<:Real,1吗? 我试过了,它有效。非常感谢。但我很好奇为什么这有效?它们有什么区别? <:Real 指定它是一个包含Real 子类型的数组,也就是说,如果有意义的话,Julia 会将其视为参数类型... 有关更多信息,请参阅docs.julialang.org/en/latest/manual/types/…,有关不变性和协方差的定义,请参阅en.wikipedia.org/wiki/…。 您最感兴趣的是如何使用这个设计或者为什么这个设计首先是这样的? 【参考方案1】:

一个真正的、不安全的方法是,举个例子:


function square(x)
# The point is for element-wise operation
       out = x.*x
end


输出:

julia> square(2)
4

julia> square([2 2 2])
1×3 ArrayInt64,2:
 4  4  4

【讨论】:

以上是关于为啥 ArrayFloat64,1 不是 Julia 中 ArrayReal,1 的子类型?的主要内容,如果未能解决你的问题,请参考以下文章

NoClassDefFoundError: org/apache/juli/logging/LogFactory

java.util.ServiceConfigurationError: org.apache.juli.logging.Log: 提供者 org.eclipse.jetty.apache.jsp.J

Tomcat日志配置文件分析

为啥 ip 不是 115.64.4.0/22 的一部分 [关闭]

为啥 linux multiarch 使用 x86_64-linux-gnu 而不是 lib64?

Julia - 数组的绝对值