簡體   English   中英

如何使用pyglet顯示numpy數組?

[英]how to display a numpy array with pyglet?

我有一個尺寸為(100 * 100)的標簽矩陣,存儲為numpy數組,我想用pyglet顯示矩陣。

我最初的想法是使用這個矩陣使用函數pyglet.image.ImageData()形成一個新的pyglet圖像。 它需要imagedata的緩沖區作為輸入,但是我不知道如何從numpy數組中獲得正確的格式化緩沖區。

任何人都有任何想法?

PS。 我目前的解決方案

3d_label = numpy.empty([100,100,3])
3d_label[:,:,0] = label * 255            # value range of label is [0,1]
3d_label[:,:,1] = label * 255
3d_label[:,:,2] = label * 255
image_data = ctypes.string_at(id(3d_label.tostring())+20, 100*100*3)
image = pyglet.image.ImageData(100, 100, 'RGB', image_data, -100*3)

有沒有更好的方法從3 [100 * 100]矩陣構造一個[100 * 100 * 3]矩陣與numpy?

我認為你要找的是np.dstack (或更一般地說, np.concatenate ):

label255=label*255
label3=numpy.dstack((label255,label255,label255))

這表明dstack產生相同的陣列( label3 )作為建設label_3d

import numpy as np

label=np.random.random((100,100))
label255=label*255
label3=np.dstack((label255,label255,label255))

label_3d = np.empty([100,100,3])
label_3d[:,:,0] = label * 255            # value range of label is [0,1]
label_3d[:,:,1] = label * 255
label_3d[:,:,2] = label * 255
print(np.all(label3==label_3d))
# True

PS。 我不確定,但你嘗試使用label3.data而不是ctypes.string_at(id(label3.tostring())+20, 100*100*3)

您可以使用3d_label.tostring()獲取數組的內存表示。

tostring()方法允許您更改元素的內存排序:

Parameters
----------
order : {'C', 'F', None}, optional
    Order of the data for multidimensional arrays:
    C, Fortran, or the same as for the original array.

PS:該3d_label.data unutbu的〜需要較少的存儲器,因為沒有字符串構成。 但是,它不允許您更改元素的輸出順序。

暫無
暫無

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

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