矩陣與矩陣數學

矩陣被用作許多數學函式的輸入和輸出。本使用者指南的此章節涵蓋矩陣建立、操作和矩陣數學的基礎知識。

矩陣

可以使用 matrix 函式建立矩陣。matrix 函式會傳遞一個 arrays 列表,其中每個陣列代表矩陣中的一個

以下範例會建立一個二乘二的矩陣。

matrix(array(1, 2),
       array(4, 5))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "return-value": [
          [
            1,
            2
          ],
          [
            4,
            5
          ]
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }}

列和欄標籤

矩陣可以有欄和列以及標籤。可以使用函式 setRowLabelssetColumnLabelsgetRowLabelsgetColumnLabels 來設定和取得標籤。標籤值是使用字串陣列設定的。

以下範例會設定列和欄標籤。在使用者指南的其他章節中,會顯示範例說明函式如何傳回已設定標籤的矩陣。

以下是在矩陣上設定和取得列和欄標籤的簡單範例。

let(echo="d, e",
    a=matrix(array(1, 2),
             array(4, 5)),
    b=setRowLabels(a, array("rowA", "rowB")),
    c=setColumnLabels(b, array("colA", "colB")),
    d=getRowLabels(c),
    e=getColumnLabels(c))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "d": [
          "rowA",
          "rowB"
        ],
        "e": [
          "colA",
          "colB"
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

視覺化

zplot 函式可以使用 heat 命名參數,將矩陣繪製為熱圖。熱圖是用於顯示相關性距離矩陣的強大視覺化工具,將在本指南後面說明。以下範例顯示在 Apache Zeppelin 中使用熱圖視覺化工具視覺化的 2x2 矩陣。

在下面的視覺化中,列是從底部向上讀取的,這是熱圖的常見慣例。
matrix

存取列和欄

可以使用 rowAtcolAt 函式存取矩陣的列和欄。

以下範例會建立一個 2x2 矩陣,並傳回矩陣的第二欄。請注意,在此範例中,矩陣會傳遞變數,而不是直接傳遞陣列清單。

let(a=array(1, 2),
    b=array(4, 5),
    c=matrix(a, b),
    d=colAt(c, 1))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "d": [
          2,
          5
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

矩陣屬性

矩陣也可以有與之關聯的任意一組命名屬性。某些函式,例如 termVectors 函式,會傳回包含描述矩陣中資料的屬性的矩陣。

可以使用 getAttribute 函數依名稱檢索屬性,並使用 getAttributes 函數傳回整個屬性映射。

矩陣維度

可以使用 rowCountcolumnCount 函數來確定矩陣的維度。

以下範例檢索矩陣的維度。

let(echo="b,c",
    a=matrix(array(1, 2, 3),
             array(4, 5, 6)),
    b=rowCount(a),
    c=columnCount(a))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "b": 2,
        "c": 3
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

矩陣轉置

可以使用 transpose 函數轉置矩陣。

下面顯示矩陣轉置的範例

let(a=matrix(array(1, 2),
             array(4, 5)),
    b=transpose(a))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "b": [
          [
            1,
            4
          ],
          [
            2,
            5
          ]
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 24
      }
    ]
  }
}

矩陣總和

可以使用 sumRowssumColumns 函數對矩陣的行和列求和。以下是 sumRows 函數的範例,該函數傳回一個陣列,其中包含每一行的總和。

let(a=matrix(array(1, 2, 3),
             array(4, 5, 6)),
    b=sumRows(a))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "b": [
          6,
          15
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 2
      }
    ]
  }
}

grandSum 函數傳回矩陣中所有值的總和。以下是 grandSum 函數的範例

let(a=matrix(array(1, 2, 3),
             array(4, 5, 6)),
    b=grandSum(a))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "b": 21
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

純量矩陣數學

適用於向量的相同純量數學函數也適用於矩陣:scalarAddscalarSubtractscalarMultiplyscalarDivide

以下是 scalarAdd 函數的範例,該函數將純量值新增至矩陣中的每個元素。

let(a=matrix(array(1, 2),
             array(4, 5)),
    b=scalarAdd(10, a))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "b": [
          [
            11,
            12
          ],
          [
            14,
            15
          ]
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

矩陣加法和減法

可以使用 ebeAddebeSubtract 函數加減兩個矩陣,這些函數會對矩陣執行逐元素的加法和減法。

以下是一個簡單的範例,使用 ebeAdd 將矩陣與自身進行逐元素加法

let(a=matrix(array(1, 2),
             array(4, 5)),
    b=ebeAdd(a, a))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "b": [
          [
            2,
            4
          ],
          [
            8,
            10
          ]
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}

矩陣乘法

可以使用 matrixMult 函數完成矩陣乘法。以下是矩陣乘法的簡單範例

let(a=matrix(array(1, 2),
             array(4, 5)),
    b=matrix(array(11, 12),
             array(14, 15)),
    c=matrixMult(a, b))

當此表示式傳送至 /stream 處理常式時,它會以回應

{
  "result-set": {
    "docs": [
      {
        "c": [
          [
            39,
            42
          ],
          [
            114,
            123
          ]
        ]
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 0
      }
    ]
  }
}