2016-02-01 2 views
4

я определил следующую переменнуюКакой метод использовал Юлия?

julia> X = (1:10) * ones(1,10) 

, который определяет матрицу с каждой строки равен одному и тому же количеству и номерам в колонке возрастающей от 1 до 10 на 1. Я хочу знать, какой метод используется для Julia функция *. Как я могу спросить об этом Джулии?

+0

Это [матричное умножение] (https://en.wikipedia.org/wiki/Matrix_multiplication) – Daniel

+0

Я знаю это @ Даниэль, просто я хочу, чтобы Джулия сказала мне, что я использую метод, который определяется как '* (UnitRange {Int64}, Array {Float64,2}) ' – dapias

+1

Я не очень хорошо разбираюсь в выходе, но' @code_warntype (1:10) * ones (1,10) 'может рассказать вам, что вам нужно знать , Насколько я могу судить (и я подчеркиваю, что это не то, о чем я много знаю), в конечном счете '*', по-видимому, вызывает «Base.LinAlg.generic_matmatmul!» На двух входах «Array {Float64, 2}». Надеюсь, кто-то немного более осведомлённый может чип. –

ответ

6

@which является то, что вы ищете:

@which (1:10) * ones(1, 10) 
# *(A::AbstractArray{T,1}, B::AbstractArray{T,2}) at linalg/matmul.jl:89 

в Jupyter также будет гиперссылкой на соответствующий line of code где метод определен в GitHub Джулии.

+1

Интересно. Есть ли способ итеративно копать глубже? т.е. строка, на которую ссылается ваш ответ, вызывает '*' снова, но на двух абстрактных матрицах. Есть ли способ получить '@ which', чтобы сообщить нам, какой метод был вызван далее? (предположительно в этом случае это было '*' для двух 'Matrix {Float64}'?) –

+1

@colin Нет, что я знаю, но я уверен, что есть способ метапрограммирования. – amrods

+3

@ColinTBowers, если вы получили эту строку кода, вы можете проверить следующий '' '' 'который (*, (Matrix {Float64}, Matrix {Float64})) вручную. – Gnimuc

Смежные вопросы