欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何在Python中調用C++的函數?DTW-創(chuàng)新互聯(lián)

一、問題

在 python 中執(zhí) DTW 算法,但是太慢,想到了用c++寫該算法,再用python執(zhí)行
先貼一張效果圖,可以看出,同樣一份 dtw 代碼,python 和 C++ 有10倍多的差距。
在這里插入圖片描述

成都創(chuàng)新互聯(lián)是一家集網站建設,蕪湖縣企業(yè)網站建設,蕪湖縣品牌網站建設,網站定制,蕪湖縣網站建設報價,網絡營銷,網絡優(yōu)化,蕪湖縣網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。二、C++ 寫法

有很多種方法可以在python里執(zhí)行c++代碼,這里選一個我覺得最簡單的。推薦使用vs,編譯如下代碼,注意選擇生成dll,而不是exe。
我的函數原型是 :

double dtw(double* x, int x_size, double* y, int y_size)

頭文件里需要聲明:

//頭文件 main.h
#pragma once
#includeextern "C"
{__declspec(dllexport) double __cdecl dtw(double* x, int x_size, double* y, int y_size);
};

源文件里實現:

//源文件 main.cpp
#include "main.h"
#includedouble dtw(double* x, int x_size, double* y, int y_size)
{double** D0 = (double**)malloc(sizeof(double*) * (x_size + 1));
    for (int i = 0; i< x_size + 1; i++)
        D0[i] = (double*)malloc(sizeof(double) * (y_size + 1));

    //填充邊框
    D0[0][0] = 0;
    for (int i = 1; i< x_size + 1; i++) D0[i][0] = INT_MAX;
    for (int i = 1; i< y_size + 1; i++) D0[0][i] = INT_MAX;


    //填充數據
    for (int i = 1; i< x_size + 1; i++)
    {for (int j = 1; j< y_size + 1; j++)
        {D0[i][j] = abs(x[i - 1] - y[j - 1]);
        }
    }

    for (int i = 1; i< x_size + 1; i++)
    {for (int j = 1; j< y_size + 1; j++)
        {	//使用min()函數時候總會莫名其妙報錯
            double temp = D0[i - 1][j]< D0[i][j - 1] ? D0[i - 1][j] : D0[i][j - 1];
            double t = temp< D0[i - 1][j - 1] ? temp : D0[i - 1][j - 1];
            D0[i][j] += t;
        }
    }
    double d = D0[x_size][y_size];
    for (int ii = 0; ii< x_size + 1; ii++)
    {free(D0[ii]); //一定要釋放!
    }
    free(D0);
    return d;
}

在vs中編譯生成dll庫后,拿去python里用。

注意:
對于malloc申請的內存,一定要釋放掉。內存泄漏以前我都不管,因為函數執(zhí)行次數不多,程序結束也就自動釋放了。但這次由于 dtw 函數在 python 里執(zhí)行了幾十萬次,瞬間內存就爆了。

3、Python 寫法

首先導入ctypes 庫:

from ctypes import *

然后導入dll庫:

dll = CDLL("./DTW_DLL.dll")
dtwc = dll.dtw #dtw名稱需要與c++中函數名稱一致

Python寫法中需要注意的,就是傳入和傳出參數的類型,我的C++函數原型是

double dtw(double* x, int x_size, double* y, int y_size)

因此傳入參數是[double* , int , double* ,int],傳出參數是[double]
設定傳入傳出參數類型:

dtwc.argtypes = [np.ctypeslib.ndpointer(dtype=np.float64,ndim=1),c_int,
                    np.ctypeslib.ndpointer(dtype=np.float64,ndim=1),c_int]
dtwc.restype = c_double

最后執(zhí)行函數:

d = dtwc(x,20,y,20)

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

本文標題:如何在Python中調用C++的函數?DTW-創(chuàng)新互聯(lián)
標題URL:http://chinadenli.net/article24/dcjhce.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、搜索引擎優(yōu)化、網站營銷品牌網站設計、域名注冊、電子商務

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設
不卡免费成人日韩精品| 大香蕉精品视频一区二区| 偷拍洗澡一区二区三区| 99久久人妻中文字幕| 人人妻人人澡人人夜夜| 久久人人爽人人爽大片av| 亚洲欧洲日韩综合二区| 国产人妻熟女高跟丝袜| 激情偷拍一区二区三区视频| 中国美女偷拍福利视频| 91麻豆视频国产一区二区| 小草少妇视频免费看视频| 国产精品欧美在线观看| 欧美激情床戏一区二区三| 国产免费一区二区不卡| 日本大学生精油按摩在线观看 | 国产伦精品一区二区三区精品视频 | 国产日本欧美特黄在线观看| 亚洲中文字幕在线视频频道| 国产精品自拍杆香蕉视频| 91久久精品在这里色伊人| 国产又大又黄又粗又免费| 国产精品免费视频视频| 国产精品一区二区视频大全| 亚洲男人的天堂久久a| 日韩欧美一区二区不卡看片| 久久精品国产亚洲av麻豆| 人妻久久这里只有精品| 久久碰国产一区二区三区| 国产精品午夜性色视频| 免费久久一级欧美特大黄孕妇| 一区二区三区18禁看| 欧美一区日韩一区日韩一区| 九九热这里只有精品哦| 精品国产丝袜一区二区| 国产又粗又爽又猛又黄的| 日韩精品毛片视频免费看| 日韩精品综合福利在线观看| 91久久精品国产成人| 午夜午夜精品一区二区| 国产免费无遮挡精品视频|