---
title: make_coord
description: "创建Coord，用于描述矩阵下标，从而用于Tensor对象的取下标操作。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_105.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_105.html
indexId: 1421d606dc3c23e2de26ecfb4b0224a7aebe8487399868d1bea61463bb6da97c67
---
# make_coord

创建Coord，用于描述矩阵下标，从而用于Tensor对象的取下标操作。

#### 接口定义

template<typename... Args>

Coord<Args...> make_coord(Args ... args);


#### 参数


**表1 参数定义**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| 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下标对象。
