---
title: kml_sparse_?axpyi
description: "标量与向量相乘，并加到另一向量上。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0021.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_0021.html
indexId: 3a3dbd814983a8886cc3eecf7ca2dded50947a9fa12482c6b28304902a404c0d61
---
# kml_sparse_?axpyi

标量与向量相乘，并加到另一向量上。

即：y = a * x + y。a是缩放系数，x是稀疏向量，y是稠密向量。

#### 接口定义

C interface：

kml_sparse_status_t kml_sparse_saxpyi(const KML_INT nz, const float a, const float *x, const KML_INT *indx, float *y);

kml_sparse_status_t kml_sparse_daxpyi(const KML_INT nz, const double a, const double *x, const KML_INT *indx, double *y);

kml_sparse_status_t kml_sparse_caxpyi(const KML_INT nz, const KML_Complex8 a, const KML_Complex8 *x, const KML_INT *indx, KML_Complex8 *y);

kml_sparse_status_t kml_sparse_zaxpyi(const KML_INT nz, const KML_Complex16 a, const KML_Complex16 *x, const KML_INT *indx, KML_Complex16 *y);

Fortran interface：

RES = KML_SPARSE_SAXPYI(NZ, A, X, INDX, Y);

RES = KML_SPARSE_DAXPYI(NZ, A, X, INDX, Y);

RES = KML_SPARSE_CAXPYI(NZ, A, X, INDX, Y);

RES = KML_SPARSE_ZAXPYI(NZ, A, X, INDX, Y);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| nz | 整型数 | x及indx数组中元素的个数。 | 输入 |
| a | 在saxpyi中，a是单精度浮点类型。 在daxpyi中，a是双精度浮点类型。 在caxpyi中，a是单精度复数。 在zaxpyi中，a是双精度复数。 | 标量a。 | 输入 |
| x | 在saxpyi中，x是单精度浮点类型数组。 在daxpyi中，x是双精度浮点类型数组。 在caxpyi中，x是单精度复数数组。 在zaxpyi中，x是双精度复数数组。 | 存储非零元素的数组x，长度等于nz。 | 输入 |
| indx | 整型数组 | indx[i]表示x数组中第i个元素在稠密向量中的序列号，长度等于nz。 | 输入 |
| y | 在saxpyi中，y是单精度浮点类型数组。 在daxpyi中，y是双精度浮点类型数组。 在caxpyi中，y是单精度复数数组。 在zaxpyi中，y是双精度复数数组。 | 数组y，大于或等于max(indx[i])。 | 输入/输出 |


#### 返回值

函数执行状态，枚举类型kml_sparse_status_t。


#### 依赖

C: "kspblas.h"

Fortran: "kspblas.f03"


#### 示例

C interface：

```
KML_INT nz = 2; 
    float alpha = 1; 
    KML_INT indx[2] = {1, 2}; 
    float x[2] = {1, 3}; 
    float y[4] = {-1, 1, 5, 3}; 
    kml_sparse_status_t status = kml_sparse_saxpyi(nz, alpha, x, indx, y); 
 
    /* 
     *  Output Y: 
     *     -1.000000     2.000000     8.000000     3.000000 
     * 
     */
```

Fortran interface：

```
INTEGER(C_INT) :: NZ = 2
REAL(C_FLOAT) :: ALPHA = 1
INTEGER(C_INT) :: INDX(2)
REAL(C_FLOAT) :: X(2), Y(4)
DATA INDX/1, 2/
DATA X/1, 3/
DATA Y/-1, 1, 5, 3/
INTEGER :: STATUS
STATUS = KML_SPARSE_SAXPYI(NZ, ALPHA, X, INDX, Y)
!
!  OUTPUT Y:
!     -1.000000     2.000000     8.000000     3.000000
!
!
```
