make_coord
创建Coord,用于描述矩阵下标,从而用于Tensor对象的取下标操作。
接口定义
template<typename... Args>
Coord<Args...> make_coord(Args ... args);
参数
参数名 |
类型 |
描述 |
输入/输出 |
|---|---|---|---|
args... |
Args...,支持任意Int<>、Underscore或int类型对象及任意Coord<>类型对象作为输入。 |
用于定义矩阵下标。对于非峰形矩阵只需输入Int<>、Underscore或int类型对象,其中Int<>和Underscore类型变量表示编译期可确认变量,Underscore具体表示该维度所有下标;int类型变量表示运行期可确定变量。对于峰形矩阵需要输入Shape<>类型对象进行嵌套描述。 |
输入 |
返回值
返回Coord<Args...>对象。
示例
#include "stdlib.h"
#include "kupl_mma.h"
using namespace kupl::tensor;
int main()
{
constexpr int MATRIX_M = 32;
constexpr int MATRIX_N = 16;
double *data = (double *)malloc(sizeof(double) * MATRIX_M * MATRIX_N);
auto shape = make_shape(Int<32>{}, Int<16>{});
auto stride = make_stride(Int<16>{}, Int<1>{});
auto layout = make_layout(shape, stride);
atuo tensor = make_tensor(data, layout);
// 获取下标为(2,2)的Tensor元素
auto coord1 = make_coord(Int<2>{}, Int<2>{});
auto ret1 = tensor(coord1);
// 通过Underscore类型变量实现Tensor切片效果,coord2表示获取第2行所有Tensor元素
auto coord2 = make_coord(Int<2>{}, Underscore{});
auto ret2 = tensor(coord2);
auto coord3 = make_coord(Int<2>{});
auto ret3 = ret2(coord3);
free(data);
return 0;
}
上述示例演示了针对32*16的Tensor对象的取下标和切片操作,其中make_coord表示如何生成Coord下标对象。
父主题: 矩阵编程接口函数