find
用途:find函数用于寻找非零元素或者满足条件的元素的索引。
该函数重载有find( X )、find( X, k )、find( X, k, s )。
类型:普通函数
1、返回包含非零或满足关系条件的X元素的索引的列向量
2、输出向量必须具有uvec 类型(即索引存储类型为无符号整数uword)
3、X可理解为向量,按列对 X 元素进行排序
4、可以用关系运算符代替X,例如。A > 0.5
5、如果k=0(默认值),返回所有非零元素的索引,否则最多返回k个索引
6、如果s=”first”(默认),最多返回非零元素的第一个 k个索引
7、如果s=”last”,最多返回非零元素的最后 k 个索引
注意:
- 获取间隔内的值,clamp() 效率更高
- 替换特定值,.replace()效率更高
示例代码如下:
mat A = randu<mat>(5,5);
mat B = randu<mat>(5,5);
uvec q1 = find(A > B);
uvec q2 = find(A > 0.5);
uvec q3 = find(A > 0.5, 3, "last");
// change elements of A greater than 0.5 to 1
A.elem( find(A > 0.5) ).ones();
clamp
用途:clamp函数用于获取限制内的元素
类型:普通函数
clamp( X, min_val, max_val )
1、创建 X的副本,每个元素位于[min_val,max_val]之间;
任何低于min_val的元素将设置为min_val,高于max_val的元素将设置为max_val;
2、如果X是稀疏矩阵,则该操作仅适用于非零元素。
示例代码如下:
mat A = randu<mat>(5,5);
mat B = clamp(A, 0.2, 0.8);
mat C = clamp(A, A.min(), 0.8);
mat D = clamp(A, 0.2, A.max());
.replace
用途:.replace函数用于将新值替换特殊元素
类型:成员函数
.replace( old_value, new_value )
1、Mat 、Col 、Row、Cube和 SpMat 的成员函数;
2、所有等于old_value的元素,将设置为new_value;
3、容器和old_valuenew_value必须匹配容器对象使用的元素类型(例如,对于mat类型为双精度)。
警告:
- 浮点数(float和double)是近似值,因为其精度必然有限
- 对于稀疏矩阵 (SpMat),当old_value=0不适用
mat A(5,6,fill::randu);
A.diag().fill(datum::nan);
A.replace(datum::nan, 0); // replace each NaN with 0