一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

如何獲取numpy數(shù)組的真實地址?如何與ctypes數(shù)組共享內(nèi)存?

 lgk88888 2020-12-01

1、如何獲取numpy數(shù)組元素的真實地址?

在Python編程中,numpy是一個很好用的擴展程序庫,將其與SciPy庫和 Matplotlib繪圖庫一起使用,可構(gòu)成一個強大的類似于Matlab的科學計算環(huán)境,有助于我們通過 Python 學習數(shù)據(jù)科學或者機器學習。在Python中,當你定義了一個numpy類型的數(shù)組后,它內(nèi)部元素的真實地址如何獲得呢?

  

這里可以通過numpy數(shù)組的“__array_interface__”接口得到。

比如下面的例子:

import numpy as np 

from ctypes import * 

a = np.array([1, 2, 3, 4, 5], dtype=np.uint8) 

print(a.__array_interface__['data'])

上面程序定義了一個numpy類型的數(shù)組a,運行后得到:

(1883707159072, False)

接口__array_interface__”返回一個包含兩個元素的元組,其第1個元素即為a數(shù)組內(nèi)部元素存放的真實地址,第2個元素標明了該數(shù)組是否為“只讀”屬性。

2、如何與ctypes庫創(chuàng)建的數(shù)組共享內(nèi)存空間?

對于Python編程人員來說,ctypes庫也是使用率比較高的一個庫,當調(diào)用第三方提供的動態(tài)庫鏈接庫函數(shù)時,它經(jīng)常用于定義與C語言兼容的數(shù)據(jù)類型變量,作為Python語言與C語言進行數(shù)據(jù)交互的橋梁。

那么,如何使用ctypes庫定義一個與numpy共享內(nèi)存空間的數(shù)組變量呢?

仍以上面的例子,定義一個uint8類型的數(shù)組b,與a數(shù)組共享內(nèi)存區(qū)域,可使用下面的代碼:

b = (c_uint8*len(a)).from_address(a.__array_interface__['data'][0]) 

print('a =', a, '\nb =', b[:])

運行后得到:

a = [1 2 3 4 5] 

b = [1, 2, 3, 4, 5]

可見,使用ctypes庫的from_address函數(shù)定義了一個與a同地址的數(shù)組b,打印出b的元素值后,其初始元素值確實與數(shù)組a相同。

下面驗證一下,數(shù)組a和b里面的元素是否真正的占用同一個內(nèi)存區(qū)域。

先改變數(shù)組a中第1個元素的值,運行下面的代碼:

a[0] = 10 

print('a =', a, '\nb =', b[:]}])

其運行結(jié)果為:

a = [10 2 3 4 5] 

b = [10, 2, 3, 4, 5]

可見,將數(shù)組a中的第一個元素的值由1改成10后,b數(shù)組中第一個元素也同步改變成10了。

緊接著,再改變b數(shù)組中第二個元素的值,由2改為20:

b[1] = 20 

print('a =', a, '\nb =', b[:])

其運行結(jié)果為:

a = [10 20 3 4 5] 

b = [10, 20, 3, 4, 5]

顯然,數(shù)組a中第二個元素的值也同步改變?yōu)?0了。

因此,數(shù)組a與數(shù)組b確實是占用的同一個內(nèi)存地址空間。

另外,也可以通過數(shù)組b再定義一個與b共享內(nèi)存區(qū)域的numpy數(shù)組c,使用下面的代碼即可:

c = np.frombuffer(b, dtype=np.uint8)

大家可以自行驗證數(shù)組a、b、c是否為同一個內(nèi)存空間。

3、結(jié)論

上面的例子表明,在Python編程中,numpy類型的數(shù)組與ctypes類型的數(shù)組可以進行互換,比如,可以使用numpy庫進行復雜的運算后,再轉(zhuǎn)換成ctypes類型的數(shù)組,傳遞到第3方的動態(tài)庫dll函數(shù)中作進一步的處理,這樣,在某些場合下,既能使用numpy庫的強大運算功能,又可以使用第三方庫,來實現(xiàn)我們特定的處理需求。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久久精品中文字幕人妻中文| 国产丝袜极品黑色高跟鞋| 日韩精品一区二区毛片| 台湾综合熟女一区二区| 欧美日本精品视频在线观看| 精品国产亚洲免费91| 精品国自产拍天天青青草原| 国产欧美日韩在线一区二区| 欧美成人免费一级特黄| 国产又大又硬又粗又黄| 暴力三级a特黄在线观看| 欧美大黄片在线免费观看| 一级片二级片欧美日韩| 日本男人女人干逼视频| 亚洲中文字幕日韩在线| 日本高清二区视频久二区| 熟女乱一区二区三区四区| 欧美日韩亚洲国产精品| 中文字幕中文字幕一区二区| 国产精品成人一区二区三区夜夜夜 | 午夜精品一区二区av| 欧美日韩国产成人高潮| 黄色国产自拍在线观看| 在线观看欧美视频一区| 国产激情国产精品久久源| 欧美日韩免费黄片观看| 亚洲男人的天堂久久a| 人妻久久这里只有精品| 国产水滴盗摄一区二区| 很黄很污在线免费观看| 黄色国产自拍在线观看| 国产麻豆成人精品区在线观看| 不卡中文字幕在线免费看| 五月婷日韩中文字幕四虎| 成人综合网视频在线观看| 亚洲中文字幕综合网在线| 亚洲二区欧美一区二区| 精品人妻一区二区三区四在线| 欧美精品一区久久精品| 在线观看中文字幕91| 日本高清加勒比免费在线|