矢量填充1 vDSP_vfill函数(float)
typedef unsigned long vDSP_Length;
typedef long vDSP_Stride;
extern void vDSP_vfill(
const float *__A,
float *__C,
vDSP_Stride __IA,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
公式:
举例:
注:传入的参数和数组给这个函数,注意数组越界问题。
float a[1],output[8]={0};
printf("input:\n");
*a = 5.0;
printf("%f ",*a);
vDSP_vfill(a, output,1, 8);
printf("\noutput:\n");
for (int i=0; i<8; i++) {
printf("%f ",output[i]);
}
打印结果:
input:
5.000000
output:
5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000
5.000000
output:
5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000 5.000000
修改函数参数如下:
vDSP_vfill(a, output,1, 4);
打印结果:
input:
5.000000
output:
5.000000 5.000000 5.000000 5.000000 0.000000 0.000000 0.000000 0.000000
5.000000
output:
5.000000 5.000000 5.000000 5.000000 0.000000 0.000000 0.000000 0.000000
修改函数参数如下:
vDSP_vfill(a, output,2, 4);
打印结果:
input:
5.000000
output:
5.000000 0.000000 5.000000 0.000000 5.000000 0.000000 5.000000 0.000000
5.000000
output:
5.000000 0.000000 5.000000 0.000000 5.000000 0.000000 5.000000 0.000000
修改函数参数如下:
vDSP_vfill(a, output,3, 4);
打印结果:
input:
5.000000
output:
5.000000 0.000000 0.000000 5.000000 0.000000 0.000000 5.000000 0.000000
5.000000
output:
5.000000 0.000000 0.000000 5.000000 0.000000 0.000000 5.000000 0.000000
矢量填充2 vDSP_vfillD函数 (double)
extern void vDSP_vfillD(
const double *__A,
double *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
矢量填充3 vDSP_vfilli函数 (int)
extern void vDSP_vfilli(
const int *__A,
int *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
矢量填充4 vDSP_zvfill函数 (复数float)
typedef struct DSPSplitComplex {
float * __nonnull realp;
float * __nonnull imagp;
} DSPSplitComplex;
extern void vDSP_zvfill(
const DSPSplitComplex *__A,
const DSPSplitComplex *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
公式:
例子:
float ar[1]={1},ai[1]={2};
float outr[8]={0},outi[8]={0};
DSPSplitComplex a[1],output[1];
a[0].imagp = ai;
a[0].realp = ar;
output[0].imagp = outi;
output[0].realp = outr;
printf("input:\n");
printf("(%f)+(%f)i",a[0].realp[0],a[0].imagp[0]);
vDSP_zvfill(a,output,1,8);
printf("\noutput:\n");
for (int i=0; i<8; i++) {
printf("(%f)+(%f)i\n",output[0].realp[i],output[0].imagp[i]);
}
打印结果:
input:
(1.000000)+(2.000000)i
output:
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
output:
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
修改函数参数如下:
vDSP_zvfill(a,output,1,4);
打印结果如下:
input:
(1.000000)+(2.000000)i
output:
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(0.000000)+(0.000000)i
(0.000000)+(0.000000)i
(0.000000)+(0.000000)i
修改函数参数如下:
vDSP_zvfill(a,output,2,4);
打印结果如下:
input:
(1.000000)+(2.000000)i
output:
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
output:
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
(1.000000)+(2.000000)i
(0.000000)+(0.000000)i
矢量填充5 vDSP_zvfillD函数 (复数double)
typedef struct DSPDoubleSplitComplex {
double * __nonnull realp;
double * __nonnull imagp;
} DSPDoubleSplitComplex;
extern void vDSP_zvfillD(
const DSPDoubleSplitComplex *__A,
const DSPDoubleSplitComplex *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
矢量清除6 vDSP_vclr函数 (float)
extern void vDSP_vclr(
float *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
函数计算:
for (n = 0; n < N; ++n)
C[n] = 0;
C[n] = 0;
例子:
float input[8];
printf("input:\n");
for (int i=1; i<=8; i++) {
input[i-1]=-i;
printf("%f ",input[i-1]);
}
vDSP_vclr(input, 1, 8);
printf("\noutput:\n");
for (int i=0; i<8; i++) {
printf("%f ",input[i]);
}
打印结果:
input:
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000
output:
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000
output:
0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
修改函数参数如下:
vDSP_vclr(input, 1, 5);
打印结果:input:
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000
output:
0.000000 0.000000 0.000000 0.000000 0.000000 -6.000000 -7.000000 -8.000000
-1.000000 -2.000000 -3.000000 -4.000000 -5.000000 -6.000000 -7.000000 -8.000000
output:
0.000000 0.000000 0.000000 0.000000 0.000000 -6.000000 -7.000000 -8.000000
矢量清除7 vDSP_vclrD函数 (double)
extern void vDSP_vclrD(
double *__C,
vDSP_Stride __IC,
vDSP_Length __N)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
祝您生活愉快!