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)...' –