Scala breeze中转置的底层实现(DenseMatrix或DenseVector)在哪里?

Scala breeze中转置的底层实现(DenseMatrix或DenseVector)在哪里?,scala,scala-breeze,Scala,Scala Breeze,背后 <foo>.t(..) // .t() is transpose 但是请注意,Intellij IDE无法找到任何用法。我试图找到DenseMatrix和DenseVector是如何实现转置的。我坦承其中的含义可能有点难以理解。NumericOps的.t方法(DenseVector和DM从中获取)定义如下: final def t[TT >: This, That](implicit op: CanTranspose[TT, That]) = op.ap

背后

<foo>.t(..)  // .t() is transpose 

但是请注意,Intellij IDE无法找到任何用法。我试图找到DenseMatrix和DenseVector是如何实现转置的。

我坦承其中的含义可能有点难以理解。NumericOps的.t方法(DenseVector和DM从中获取)定义如下:

  final def t[TT >: This, That](implicit op: CanTranspose[TT, That]) =
    op.apply(repr)
DenseMatrix的CanTranspose隐式定义如下:

  implicit def canTranspose[V]: CanTranspose[DenseMatrix[V], DenseMatrix[V]] = {
    new CanTranspose[DenseMatrix[V], DenseMatrix[V]] {
      def apply(from: DenseMatrix[V]) = {
        new DenseMatrix(data = from.data, offset = from.offset,
         cols = from.rows, rows = from.cols, 
         majorStride = from.majorStride,
         isTranspose = !from.isTranspose)
      }
    }
  }
相关位是isTranspose布尔值的翻转(以及行和列的交换)。因此,DenseMatrix上的“.t”只会创建一个新的DenseMatrix,它是列主(!isTranspose)和行主(!isTranspose)

DenseVector在一般情况下没有隐含的cantransport。相反,在张量伴生对象中为所有张量定义了一个隐式:

  implicit def transposeTensor[K, V, T](implicit ev: T<:<Tensor[K, V]): CanTranspose[T, Transpose[T]] = {
    new CanTranspose[T, Transpose[T]] {
      def apply(from: T): Transpose[T] = new Transpose(from)
    }

  }

implicit def transposeTensor[K,V,T](implicit ev:T请随意在此处或邮件列表上提出更多问题。我尽我所能做出回应。一般来说,Breeze会尽量做到一般(几乎是病态的),这样操作就可以用其他操作来定义。例如,我们可以为任何具有转置和矩阵乘法的类型定义稀疏svd。大多数复杂性都是为了实现这一点。哇,这是一个惊人的答案,谢谢!我只是在学习Breeze,只是在昨晚睡觉之前尝试学习这个。你会吗We’我要找一本有这种语言的书(即使它是在亚马逊上自行出版的PDF…)谢谢!我曾想过要写一本书,我也打算写,但我现在的带宽非常有限。你有没有一本关于numpy(或Julia,或Matlab,或其他类似的)的书,我可以把它作为灵感?
  implicit def transposeTensor[K, V, T](implicit ev: T<:<Tensor[K, V]): CanTranspose[T, Transpose[T]] = {
    new CanTranspose[T, Transpose[T]] {
      def apply(from: T): Transpose[T] = new Transpose(from)
    }

  }