Chai Xiangyu | Research, Develop, Projects, Blogs Algorithm Armadillo使用介绍(六):find、clamp、.replace

Armadillo使用介绍(六):find、clamp、.replace

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

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Related Post