[英]How to define custom float-type numpy dtypes (C-API)
我有一個自定義浮點數據類型,使用兩個64位浮點( QD庫中的雙重類dd_real
)模擬128位浮點數。 從C ++我想導出一個ndarray到python。 我已經知道如何為64位浮點數做這個,但是對於雙倍的我需要指定我自己的自定義dtype。 怎么做?
注意:numpy有自己的128位浮點數(np.float128),遺憾的是它在C / C ++中映射為long double
,它只是一個存儲在128位(在我所有平台上)的80位浮點數。
實際上,應該能夠以與numpy導出np.float128(我只是不知道如何完成)相同的方式執行此操作,唯一的區別是它在C ++端使用dd_real
而不是long double
。
如果這有幫助,我已經使用boost::python
將C ++類型dd_real
到boost::python
也許這可以以某種方式重用。
到目前為止,我能夠研究以下內容
dtypes的numpy文檔是指如何導出自定義dtypes的C-API ,但該文檔僅以某種方式解釋了現有的dtypes而不是如何創建新的dtypes。
在瀏覽 stackoverflow時我發現了這個例子,但我想知道對於dd_real
這是否可以更簡單。 我也看不到實際生成dtype的位置。 也許只能在python __ init__中通過np.typeDict['quaternion'] = np.dtype(quaternion)
。 當我想生成一個ndarray時,如何在C ++中使用該dtype?
您鏈接到的存儲庫,
https://github.com/numpy/numpy-dtypes
可能包含有關如何向Numpy添加新dtype的最簡單的示例。 我不知道更簡單的方法。 注意這些文件中對register_cast_function
和REGISTER_UFUNC
的調用:這些告訴Numpy如何在逐個元素級別處理乘法和轉換等操作。
但是,如果你真正想做的只是導出數據,你可以只導出一個雙打數組,或者將兩個雙打捆綁到一個數據類型
np.dtype([('a', double), ('b', double)])
然后,您需要編寫單獨的函數來對這些數組執行操作(因為arr1 * arr2
將不會執行您想要的操作)。 進一步使arr1 * arr2
工作的一種可能方法是將np.ndarray
子類np.ndarray
您的數據類型,覆蓋__mul__
等操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.