我有一些复数z数组,我想用ncol函数把它转换成rgb值。然后我想用它来创建pygame syrfarray。这里是例子

import numpy as np
import cmath
z =  np.array([[(complex(-(x/2),-(y/2))) for x in range(2)]for y in range(2)])
def ncol(z):
    if cmath.phase(z)>180:
        w = (255,255,255)
    else:
        w = (125,125,0)
    return w
fz = np.frompyfunc(ncol,1,1)
w = fz(z)
print(w)

我怎么能把它翻译成pygame的surfarray呢?
我试过了
pygame.surfarray.blit_array(surf,w)

但它给了
ValueError: Unsupported array element type

据我所知,z的形状为(2,2),surfarray的正确形状为(2,2,3)
skrx给出的答案
w = np.array([list(arr) for arr in w])

最佳答案

数组的形状必须与曲面的大小匹配。这意味着如果你观察numpy.array(z).shape的输出,输出必须(width, height, 3)到你的曲面的大小。可以使用surf.get_widthsurf.get_height检查曲面的宽度和高度。
此外,形状元组的第三个元素必须3,因为曲面使用3元组来表示RGB颜色值。

07-24 22:12