gpt4 book ai didi

ios - 转换参数以使 Swift 使用 vDSP API 进行编译

转载 作者:搜寻专家 更新时间:2023-10-31 08:05:33 25 4
gpt4 key购买 nike

我在尝试将 Accelerate 框架与 Swift 的 vDSP API 结合使用时遇到了一些问题。显然我做错了什么,尽管编译器给我各种警告

var srcAsFloat:CConstPointer<CFloat> = CFloat[](count: Int(width*height), repeatedValue: 0)
var dstAsFloat = CFloat[](count: Int(width*height), repeatedValue: 0)

if shouldClip {
var min:CFloat = 0.0
var max:CFloat = 255.0
var l:vDSP_Stride = Int(width*height)
vDSP_vclip(CConstPointer<CFloat>(&dstAsFloat), vDSP_Stride(1), CConstPointer<CFloat>(&min), CConstPointer<CFloat>(&max), CMutablePointer<CFloat>(&dstAsFloat), vDSP_Stride(1), l)
}

错误:

error: could not find an overload for 'init' that accepts the supplied arguments 
vDSP_vclip(CConstPointer<CFloat>(&dstAsFloat),
vDSP_Stride(1),
CConstPointer<CFloat>(&min),
CConstPointer<CFloat>(&max),
CMutablePointer<CFloat>(&dstAsFloat),
vDSP_Stride(1),
l) –

我试图摆脱它,但到目前为止,运气不好。

最佳答案

好吧,我想出了一个(可能是次优的)解决方案。我决定桥接到 Objective-C(并使用了一个稍微不同的函数)。

主.swift

import Foundation
func abs(x: matrix) -> matrix{
let N = x.count
var arg1 = NSArray(array: x)

var yy = abs_objc(arg1, CInt(N))

var y = zeros(N)
for i in 0..N{
y[i] = Double(yy[i])
}
return y

abs_objc.m

#import <Accelerate/Accelerate.h>
double* abs_objc(NSArray * x, int N){
// converting input to double *
double * xx = (double *)malloc(sizeof(double) * N);
for (int i=0; i<[x count]; i++) {
xx[i] = [[x objectAtIndex:i] doubleValue];
}

// init'ing output
double * y = (double *)malloc(sizeof(double) * N);
for (int i=0; i<N; i++){
y[i] = 0;
}

vDSP_vabsD(xx,1,y,1,N);

return y;
}

swix-Bridging-Header.h

#import <Foundation/Foundation.h>
double* abs_objc(NSArray * x, int N);

关于ios - 转换参数以使 Swift 使用 vDSP API 进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24113029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com