4
如果我做爲什麼Matrix上的'sum'返回矩陣,而不是Vector?
mat = rand(8,8)
sum(mat, 1)
返回類型是一個單列矩陣,而sum(mat, 2)
給出了一列的矩陣。這令我感到驚訝,因爲singleton維度通常是0.5,所以我期望這兩種操作的返回類型都是Vector。爲什麼singleton維度不會在這裏下降?
我可能認爲這是爲了保留方向(例如sum(mat, 1)
是一個行向量),但行爲在0.6上是一樣的,它有明確的一維RowVectors,所以這看起來不是一個解釋。
謝謝!
不錯,謝謝!我確實想過這個廣播,但並不是說它不會推廣到更高的尺寸。我看到了這個問題,所以,謝謝! 這是因爲我在矩陣的行和列總和上定義了函數,並且將輸入參數定義爲「Vector」似乎很自然,但這意味着我必須調用,例如, 'myfunc(vec(sum(mat,1)))',看起來很笨拙。但讓參數成爲矩陣似乎可能會導致問題。不過,我想我可以用調度來解決這個問題。 –
通常不需要嚴格限制參數類型。除了'Vector'之外,你幾乎可以肯定地使用'AbstractVector' - 它將包含視圖和重構的矢量以及許多其他自定義矢量類型。在所有維度上甚至比「Any」更普遍。當然,傳遞一些無意義的東西可能會比你想象的要晚一些,但它可以讓某個人傳遞一些[看起來像鴨子]的東西(https://en.wikipedia.org/wiki/Duck_typing#In_Julia)和它仍然會嘎嘎響。 –
謝謝,是的,我同意通常不需要限制函數參數(和重要的內部類型)中的類型,我喜歡這個原則!另外,我確實使用了AbstractVector(對不起)。但是,在這種情況下,行矩陣和列矩陣與Vector有不同的行爲(例如,當傳遞給像'size'這樣的函數時),如果我忽略了維度,它可能不會導致意外的錯誤?最後,我沿着'f(x :: AbstractMatrix)= f(vec(x))做了一些事情; F(X :: AbstractVector)...' –