---
title: ?lacpy
description: "拷贝矩阵A的所有元素或部分元素到矩阵B。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0708.html
sourcePath: /source/zh/kunpengboostkithistory/240RC1/accel/kunpengaccel_kml_16_0708.html
indexId: c76f94272cc2f4342f9f44e73d7dabf2ce1dea35694820b64a07ed776d8098db76
---
# ?lacpy

拷贝矩阵A的所有元素或部分元素到矩阵B。

#### 接口定义

C Interface：

slacpy_(const char *uplo, const int *m, const int *n, const float *a, const int *lda, float *b, const int *ldb);

dlacpy_(const char *uplo, const int *m, const int *n, const double *a, const int *lda, double *b, const int *ldb);

clacpy_(const char *uplo, const int *m, const int *n, const float _Complex *a, const int *lda, float _Complex *b, const int *ldb);

zlacpy_(const char *uplo, const int *m, const int *n, const double _Complex *a, const int *lda, double _Complex *b, const int *ldb);

Fortran Interface：

SLACPY(UPLO, M, N, A, LDA, B, LDB);

DLACPY(UPLO, M, N, A, LDA, B, LDB);

CLACPY(UPLO, M, N, A, LDA, B, LDB);

ZLACPY(UPLO, M, N, A, LDA, B, LDB);


#### 参数

| 参数 | 类型 | 说明 | 输入/输出 |
| --- | --- | --- | --- |
| uplo | 字符型 | 'U'，只拷贝矩阵A的上三角部分。 'L'，只拷贝矩阵A的下三角部分。 其他值，拷贝矩阵A的所有元素。 | 输入 |
| m | 整数型 | 矩阵A的行数，m≥0。 | 输入 |
| n | 整数型 | 矩阵A的列数，n≥0。 | 输入 |
| a | 在slacpy中为单精度浮点型数组。 在dlacpy中为双精度浮点型数组。 在clacpy中为单精度复数型数组。 在zlacpy中为双精度复数型数组。 | 大小为lda\*n。 若uplo='U'时，只有上三角或梯形部分元素可以访问。 若uplo='L'时，只有下三角或梯形部分元素可以访问。 | 输入 |
| lda | 整数型 | 矩阵A的主维，lda≥max(1,m)。 | 输入 |
| b | 在slacpy中为单精度浮点型数组。 在dlacpy中为双精度浮点型数组。 在clacpy中为单精度复数型数组。 在zlacpy中为双精度复数型数组。 | 大小为ldb\*n。 退出时，在指定的uplo范围内，矩阵b=矩阵a。 | 输出 |
| ldb | 整数型 | 矩阵b的主维，ldb≥max(1, m)。 | 输入 |


#### 依赖

#include "klapack.h"


#### 示例

C Interface：

```
const char uplo = 'F';
const int m = 4;
const int n = 4;
const int lda = 4;
const int ldb = 4;
double a[] = { 1.0, 1.0, 1.0, 1.0,
2.0, 2.0, 2.0, 2.0,
8.0, 3.0, 3.0, 3.0,
4.0, 4.0, 4.0, 4.0};
double *b = (double*)malloc(lda * n * sizeof(double));
dlacpy_(&uplo, &m, &n, a, &lda, b, &ldb);
/* output */
* b
* 1.000000        2.000000        8.000000        4.000000
* 1.000000        2.000000        3.000000        4.000000
* 1.000000        2.000000        3.000000        4.000000
* 1.000000        2.000000        3.000000        4.000000
```

Fortran Interface:

```
CHARACTER :: uplo = "F"
PARAMETER (n = 4)
PARAMETER (m = 4)
PARAMETER (lda = 4)
PARAMETER (ldb = 4)
REAL(8) :: a(lda, n)
REAL(8) :: b(ldb, n)
DATA a / 1.0, 1.0, 1.0, 1.0,
$        2.0, 2.0, 2.0, 2.0,
$        8.0, 3.0, 3.0, 3.0,
$        4.0, 4.0, 4.0, 4.0 /
EXTERNAL DLACPY
CALL DLACPY(uplo, m, n, a, lda, b, ldb);
*
* Output:
* a output (stored in column-major)
* 1.000000        2.000000        8.000000        4.000000
* 1.000000        2.000000        3.000000        4.000000
* 1.000000        2.000000        3.000000        4.000000
* 1.000000        2.000000        3.000000        4.000000
```
