矩阵和矩阵数学
矩阵既可用作许多数学函数的输入,也可用作输出。本用户指南的这一部分涵盖了矩阵创建、操作和矩阵数学的基础知识。
矩阵
可以使用 matrix
函数创建矩阵。matrix 函数传递一个 arrays
列表,其中每个数组表示矩阵中的一个行。
以下示例创建了一个 2x2 矩阵。
matrix(array(1, 2),
array(4, 5))
当此表达式发送到 /stream
处理程序时,它会响应
{
"result-set": {
"docs": [
{
"return-value": [
[
1,
2
],
[
4,
5
]
]
},
{
"EOF": true,
"RESPONSE_TIME": 0
}
]
}}
行标签和列标签
矩阵可以有列和行标签。可以使用 setRowLabels
、setColumnLabels
、getRowLabels
和 getColumnLabels
函数来设置和获取标签。标签值使用字符串数组设置。
以下示例设置行标签和列标签。在用户指南的其他部分中,显示了函数返回已设置标签的矩阵的示例。
下面是一个在矩阵上设置和获取行标签和列标签的简单示例。
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
}
]
}
}
访问行和列
可以使用 rowAt
和 colAt
函数访问矩阵的行和列。
以下示例创建一个 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
函数返回整个属性映射。
矩阵维度
可以使用 rowCount
和 columnCount
函数确定矩阵的维度。
下面的示例检索矩阵的维度。
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
}
]
}
}
矩阵求和
可以使用 sumRows
和 sumColumns
函数对矩阵的行和列求和。下面是 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
}
]
}
}
标量矩阵数学
应用于向量的相同标量数学函数也可以应用于矩阵:scalarAdd
、scalarSubtract
、scalarMultiply
、scalarDivide
。
下面是 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
}
]
}
}