【问题标题】:Reshaping nested vectors重塑嵌套向量
【发布时间】:2014-01-15 08:49:12
【问题描述】:

给定一个嵌套向量 A,即 3 x 4 矩阵

[[1 4 7 10] [2 5 8 11] [3 6 9 12]]

变换 A 使得嵌套向量(矩阵)现在为 2 x 6。

输出看起来像

[[1 3 5 7 9 11] [2 4 6 8 10 12]]

到目前为止,我一直停留在这个想法的开始实施上。

【问题讨论】:

  • 您是否要求解任意两个矩阵,一个维度为 AxB,另一个维度为 CxD,其中 AB = CD?是否可以将第一个矩阵的分量向量转换为长度为 A*B 的单个向量,然后使用“for”将该长平面向量的范围划分为长度为 D 的 C 个向量的新矩阵?
  • 是的,这正是我想要做的。我现在正在研究如何划分范围。

标签: clojure clojure-contrib


【解决方案1】:

您可能想查看core.matrix

;; using [net.mikera/core.matrix "0.18.0"] as a dependency
(require '[clojure.core.matrix :as matrix])

(-> [[1 4 7 10] [2 5 8 11] [3 6 9 12]]
  (matrix/transpose)
  (matrix/reshape [6 2])
  (matrix/transpose))
;= [[1 3 5 7 9 11] [2 4 6 8 10 12]]

【讨论】:

    【解决方案2】:

    此函数将重塑 m 以由具有所需形状的子向量组成

    (defn reshape [m & shape]
        (reduce (fn [vecs dim]
                    (reduce #(conj %1 (subvec vecs %2 (+ dim %2)))
                            [] (range 0 (count vecs) dim)))
                (vec (flatten m)) (reverse shape)))
    

    示例:

    (reshape [1 [2 3 4] 5 6 7 8] 2 2) => [[[1 2] [3 4]] [[5 6] [7 8]]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2021-12-25
      • 2021-02-15
      相关资源
      最近更新 更多