簡體   English   中英

如何將元組列表復制到共享內存中的現有numpy數組

[英]How to copy list of tuples to EXISTING numpy array in shared memory

我在共享內存中有一個結構化的numpy數組,這只是高維數組的一個“層”。

我有一個元組列表,我要將其值復制到此(子)數組。

我發現了如何從元組列表中創建一個新的numpy結構化數組。 但是我不知道如何將元組列表轉換為現有的numpy(sub)數組。 當然,大小已經匹配。

當然,我可以在Python for循環中逐元素復制,但這似乎效率很低。 我希望在numpy底層的C ++中完成循環。

說明:我的數組位於共享內存中的原因是,我將其用作C ++進程的通用數據結構,並由互斥量信號燈保護。

我的元組列表如下所示:

[(25141156064, 5.3647, 221.32287846), (25141157138, 5.3647, 73.70348602), (25141155120, 5.3646, 27.77147382), (25141160388, 5.3643, 55.5000024), (25141160943, 5.3636, 166.49511561), (25141154452, 5.3578, 92), (25141154824, 5.3539, 37.22246003), (25141155187, 5.3504, 37.22246003), (25141157611, 5.34, 915), (25141157598, 5.3329, 1047.32982582), (25140831246, 5.3053, 915), (25141165780, 5.2915, 2000), (25141165781, 5.2512, 2000), (25140818946, 5.2483, 915), (25138992274, 5.1688, 458), (25121724934, 5.1542, 458), (25121034787, 4.8993, 3.47518861), (24402133353, 2.35, 341), (24859679064, 0.8, 1931.25), (24046377720, 0.5, 100), (25141166091, 5.3783, -650.51242432), (25141165779, 5.3784, -1794.28608778), (25141157632, 5.3814, -2000), (25141157601, 5.3836, -2000), (25141164181, 5.3846, -499.65636506), (25141164476, 5.4025, -91), (25141157766, 5.4026, -634.80061236), (25141153364, 5.4034, -2000), (25141107806, 5.4035, -1601.88882309), (25141157694, 5.4136, -1047.32982582), (25141148874, 5.4278, -266), (25141078136, 5.4279, -48.4864096), (25141165317, 5.4283, -2000), (25141097109, 5.4284, -914), (25141110492, 5.4344, -774.75614589), (25141110970, 5.4502, -928.32048159), (25141166045, 5.4527, -2000), (25141166041, 5.493, -2000), (25139832350, 5.5, -10.2273)]

我的numpy數組具有定義如下的元素:

Id = np.uint64
Price = np.float64
Amount = np.float64

Quotation = np.dtype ([
    ('id', Id),
    ('price', Price),
    ('amount', Amount),
])

self._contents = np.ndarray (
    shape = (
        maxNrOfMarkets,
        maxNrOfItemKindsPerMarket,
        maxNrOfQuotationsPerItemKind
    )

    dtype = Quotation,
    buffer = self.sharedMemory.buf,
    offset = offset
)

如果陣列沒有共享內存支持,您將以同樣的方式進行操作。 只要確保您正確同步訪問即可。

your_array[:] = your_list

假設您有一個形狀array (list_length, tuples_length)

這是您要找的東西嗎?

my_sub_array[:] = my_list_of_tuples

舉個例子 :

my_sub_array = np.zeros((5, 3))
my_list_of_tuples = [(i, i + 1, i + 2) for i in range(5)]

my_sub_array
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

my_sub_array[:] = my_list_of_tuples

my_sub_array
array([[0., 1., 2.],
       [1., 2., 3.],
       [2., 3., 4.],
       [3., 4., 5.],
       [4., 5., 6.]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM