朱莉娅用了啥方法?
Posted
技术标签:
【中文标题】朱莉娅用了啥方法?【英文标题】:What method did Julia use?朱莉娅用了什么方法? 【发布时间】:2016-05-09 09:30:05 【问题描述】:我定义了以下变量
julia> X = (1:10) * ones(1,10)
它定义了一个矩阵,每行等于相同的数字,并且列中的数字从 1 增加到 10 增加 1。我想知道哪个方法使用 Julia 函数*
。我怎么能问 Julia?
【问题讨论】:
那是matrix multiplication 我知道@Daniel,只是我希望 Julia 告诉我我正在使用定义为*(UnitRangeInt64, ArrayFloat64,2)
的方法
我不太擅长解释输出,但@code_warntype (1:10) * ones(1,10)
可能会告诉您您需要知道的内容。据我所知(我强调这不是我所知道的),最终*
似乎在两个输入ArrayFloat64, 2
上调用Base.LinAlg.generic_matmatmul!
。希望有更多知识的人可以参与进来。
【参考方案1】:
@which
就是你要找的东西:
@which (1:10) * ones(1, 10)
# *(A::AbstractArrayT,1, B::AbstractArrayT,2) at linalg/matmul.jl:89
在Jupyter 中,它还将超链接到相应的line of code,其中该方法在 Julia 的 GitHub 中定义。
【讨论】:
有趣。有没有办法迭代地深入挖掘?即,您的答案中引用的行再次调用*
,但在两个抽象矩阵上。有没有办法让@which
也告诉我们接下来调用哪个方法? (大概在这种情况下是*
两个MatrixFloat64
?)
@colin 我不知道,但我确信有一种元编程方式可以做到这一点。
@ColinTBowers 如果你有那行代码,你可以手动检查下一个-*
by which(*, (MatrixFloat64,MatrixFloat64))
。
这种追踪噩梦是多次调度的缺点吗? :p
@GnimucK。 “which(*, (MatrixFloat64,MatrixFloat64))
”-> 是的,就是这样。正如 amrods 建议的那样,可能有一个简洁的小函数可以在这里编写来迭代链。感谢您的回复(你们俩)。以上是关于朱莉娅用了啥方法?的主要内容,如果未能解决你的问题,请参考以下文章