朱莉娅用了啥方法?

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 建议的那样,可能有一个简洁的小函数可以在这里编写来迭代链。感谢您的回复(你们俩)。

以上是关于朱莉娅用了啥方法?的主要内容,如果未能解决你的问题,请参考以下文章

Python 的类里面给属性重新赋值用了啥方法?

朱莉娅 |如何对 TimeArray 数据集执行线性回归

vuejs源码用了啥设计模式,具体点的

如果知道明文和密文,怎么知道用了啥加密算法

Keras Tokenizer 方法究竟做了啥?

e.preventDefault() 方法到底做了啥? [复制]