函数 any 和 all 可用于判断矩阵中的某些元素或所有元素是否满足特定条件。
find 函数也可用于确定矩阵中哪些元素满足特定条件。
tf = any (x) ¶tf = any (x, dim) ¶tf = any (x, vecdim) ¶tf = any (x, "all") ¶如果有任何元素非零或为真,则返回 true(逻辑 1)。
如果 x 是向量,则 any (x) 在向量的任何元素非零时返回 true(逻辑 1)。
如果 x 是矩阵,则 any (x) 返回一个由逻辑 1 和 0 组成的行向量,其中每个元素指示矩阵对应列中是否有任何元素非零。
如果 x 是数组,则 any(x) 沿着 x 的第一个非单例维度进行操作,
并返回一个逻辑数组,其大小与 x 相同,只是操作维度变为 1。
可选输入 dim 指定要操作的维度,必须为正整数。指定 x 中的任何单例维度(包括任何超过 ndims (x) 的维度)将返回 x 本身。
通过输入 vecdim(一个无重复维度的向量)指定多个维度,将沿着 vecdim 定义的数组切片进行操作。
如果 vecdim 索引了 x 的所有维度,则相当于选项 "all"。
vecdim 中大于 ndims (x) 的任何维度将被忽略。
vecdim 指定的维度的大小在返回的逻辑数组中变为 1。
将维度指定为 "all" 将导致 any 对 x 的所有元素进行操作,
等价于 any (x(:))。
另请参阅: all。
tf = all (x) ¶tf = all (x, dim) ¶tf = all (x, vecdim) ¶tf = all (x, "all") ¶如果所有元素都非零或为真,则返回 true(逻辑 1)。
如果 x 是向量,则 all (x) 在向量的所有元素都非零时返回 true(逻辑 1)。
如果 x 是矩阵,则 all (x) 返回一个由逻辑 1 和 0 组成的行向量,其中每个元素指示矩阵对应列中的所有元素是否都非零。
如果 x 是数组,则 all(x) 沿着 x 的第一个非单例维度进行操作,
并返回一个逻辑数组,其大小与 x 相同,只是操作维度变为 1。
可选输入 dim 指定要操作的维度,必须为正整数。指定 x 中的任何单例维度(包括任何超过 ndims (x) 的维度)将返回 x 本身。
通过输入 vecdim(一个无重复维度的向量)指定多个维度,将沿着 vecdim 定义的数组切片进行操作。
如果 vecdim 索引了 x 的所有维度,则相当于选项 "all"。
vecdim 中大于 ndims (x) 的任何维度将被忽略。
vecdim 指定的维度的大小在返回的逻辑数组中变为 1。
将维度指定为 "all" 将导致 all 对 x 的所有元素进行操作,
等价于 all (x(:))。
另请参阅: any。
由于比较运算符(参见 比较运算符)返回由 1 和 0 组成的矩阵, 因此可以轻松测试矩阵的多种属性,而不仅仅是元素是否非零。例如,
all (all (rand (5) < 0.9))
⇒ 0
测试一个 5×5 的随机矩阵,检查其所有元素是否都小于 0.9。
请注意,在条件上下文中(例如 if 和 while 语句的测试子句),
Octave 将测试视为您输入了 all (all (condition))。
z = xor (x, y) ¶z = xor (x1, x2, …) ¶返回 x 和 y 的异或结果。
对于布尔表达式 x 和 y,
xor (x, y) 在且仅当 x 或 y 其中之一为真时为真。
否则,如果 x 和 y 同时为真或同时为假,xor 返回假。
异或运算的真值表如下:
| x | y | z | ||
| - | - | - | ||
| 0 | 0 | 0 | ||
| 1 | 0 | 1 | ||
| 0 | 1 | 1 | ||
| 1 | 1 | 0 |
如果给定两个以上的参数,则异或运算从左到右累积应用:
(...((x1 XOR x2) XOR x3) XOR ...)
y = diff (x) ¶y = diff (x, k) ¶y = diff (x, k, dim) ¶如果 x 是长度为 n 的向量,则 diff (x) 是一阶差分向量
x(2) - x(1), …, x(n) - x(n-1)。
如果 x 是矩阵,则 diff (x) 是沿着第一个非单例维度的列差分矩阵。
第二个参数是可选的。如果提供了,diff (x, k)(其中 k 是非负整数)
返回 k 阶差分。k 可能大于矩阵的第一个非单例维度。
在这种情况下,diff 会继续沿着下一个非单例维度进行差分。
进行差分的维度可以通过可选变量 dim 显式指定。在这种情况下,将沿着此维度计算 k 阶差分。
如果 k 超过了 size (x, dim),则返回空矩阵。
tf = isinf (x) ¶返回一个逻辑数组,其中 x 的元素为无穷大时对应位置为真,否则为假。
例如:
isinf ([13, Inf, NA, NaN])
⇒ [ 0, 1, 0, 0 ]
tf = isnan (x) ¶返回一个逻辑数组,其中 x 的元素为 NaN 值时对应位置为真,否则为假。
NA 值也被视为 NaN 值。例如:
isnan ([13, Inf, NA, NaN])
⇒ [ 0, 0, 1, 1 ]
tf = isfinite (x) ¶返回一个逻辑数组,其中 x 的元素为有限值时对应位置为真,否则为假。
例如:
isfinite ([13, Inf, NA, NaN])
⇒ [ 1, 0, 0, 0 ]
[err, yi, …] = common_size (xi, …) ¶确定所有输入参数是否为标量或具有相同的大小。
如果为真,则 err 为零,且 yi 是一个具有相同大小的矩阵, 其中所有条目等于 xi(如果 xi 是标量)或等于 xi 本身。 如果无法将输入统一为相同大小,则 err 为 1,且 yi 为 xi。例如:
[err, a, b] = common_size ([1 2; 3 4], 5)
⇒ err = 0
⇒ a = [ 1, 2; 3, 4 ]
⇒ b = [ 5, 5; 5, 5 ]
这对于实现参数可以是标量或具有相同大小的函数非常有用。
另请参阅: size,size_equal,numel,ndims。
idx = find (x) ¶idx = find (x, n) ¶idx = find (x, n, direction) ¶[i, j] = find (…) ¶[i, j, v] = find (…) ¶返回矩阵中非零元素的索引向量。如果 x 是行向量则返回行向量,否则返回列向量。
为了获得每个矩阵元素的单一索引,Octave 将矩阵的列视为一个长向量(类似于 Fortran 数组的存储方式)。例如:
find (eye (2)) ⇒ [ 1; 4 ]
如果提供两个输入,n 表示要从矩阵或向量的开头查找的最大元素数量。
如果提供三个输入,direction 应取 "first" 或 "last" 之一,
分别表示只查找前 n 个或后 n 个索引。但返回的索引始终按升序排列。
如果请求两个输出,find 返回矩阵中非零元素的行索引和列索引。例如:
[i, j] = find (2 * eye (2))
⇒ i = [ 1; 2 ]
⇒ j = [ 1; 2 ]
如果请求三个输出,find 还会返回包含非零值的向量。例如:
[i, j, v] = find (3 * eye (2))
⇒ i = [ 1; 2 ]
⇒ j = [ 1; 2 ]
⇒ v = [ 3; 3 ]
如果 x 是大小为 m×n×p×… 的多维数组,则 j 包含列位置,就好像 x 被展平为大小为 m×(n+p+…) 的二维矩阵一样。
请注意,此函数对于稀疏矩阵特别有用,因为它将非零元素提取为向量,然后可以用这些向量创建原始矩阵。例如:
sz = size (a); [i, j, v] = find (a); b = sparse (i, j, v, sz(1), sz(2));
另请参阅: nonzeros。
idx = lookup (table, y) ¶idx = lookup (table, y, opt) ¶在已排序的表中查找值。
此函数通常用作插值的前奏。
如果表是递增的,长度为 N,且 idx = lookup (table, y),则对于表内的所有 y(i),
有 table(idx(i)) <= y(i) < table(idx(i+1))。
如果 y(i) < table(1),则 idx(i) 为 0。
如果 y(i) >= table(end) 或 isnan (y(i)),则 idx(i) 为 N。
如果表是递减的,则测试条件相反。对于非严格单调的表,空区间总是被跳过。 如果 table 不是单调的,或者 table 包含 NaN,则结果未定义。
查找的复杂度为 O(M*log(N)),其中 M 是 y 的大小。 在特殊情况当 y 也是已排序时,复杂度为 O(min (M*log(N), M+N))。
table 和 y 也可以是字符串的元胞数组(或者 y 可以是单个字符串)。 在这种情况下,使用字典序比较进行字符串查找。
如果指定了 opts,则它必须是一个由字母组成的字符串,表示附加选项。
m匹配(Match)。如果 y(i) 出现在表中,则 table(idx(i)) == y(i);
否则 idx(i) 为零。
b布尔(Boolean)。idx(i) 是逻辑值 1 或 0,指示 y(i) 是否包含在表中。
l向左(Left)。对于数值查找,最左侧子区间应扩展到负无穷大(即所有索引至少为 1)。
r向右(Right)。对于数值查找,最右侧子区间应扩展到正无穷大(即所有索引至多为 N-1)。
注意:如果 table 未排序,则 lookup 的结果将是不可预测的。
如果您希望检查变量是否存在(而不是其元素可能具有的属性),请参见 变量的状态。
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4