numpy Python重力场可视化

j5fpnvbx  于 2023-08-05  发布在  Python
关注(0)|答案(1)|浏览(100)

我试图在python中创建一个函数,它接收一个数组,该数组具有pygame屏幕上每个像素的重力场值,然后根据每个像素的场大小为每个像素分配一定范围内的颜色。虽然,我没有设法正确分配颜色值的像素位置与我的条件。
我已经做了一个函数,它将这个字段numpy数组和屏幕尺寸作为输入。它生成从红色到黄色的颜色列表,并且还将场幅度的范围分成与颜色数量相同的部分,以便为每个范围分配颜色。然后,它检查字段数组中的所有值,以检查它们是否落在这些范围中的任何一个范围内,它们应该至少落在其中一个范围内,并分配相应的颜色。

def fieldview(field, screen_width, screen_height):

    #Define color gradient list
    iterator = 0
    colors = []
    for i in range(52):   #52 colors
        color = (255, iterator, 0)
        colors.append(color)
        iterator = iterator + 5
    
    #Divide the range of field values into sections
    

    min_field_index = np.argmin(field)
    max_field_index = np.argmax(field)
    real_min_field_index = np.unravel_index(min_field_index, field.shape)
    real_max_field_index = np.unravel_index(max_field_index, field.shape)
    min_field_value = field[real_min_field_index]
    max_field_value = field[real_max_field_index]

    step = (max_field_value - min_field_value) / (52)
   
    
    field_levels = []
    field_value = min_field_value
    for i in range(52):
        field_level = (field_value, field_value + step)
        field_levels.append(field_level)
        field_value = field_value + step

    field_levels.reverse()
    
    #Assign a color index to each pixel according to the field value
    color_coordinate_values = np.zeros((screen_width, screen_height), dtype=np.object_)
    
    for i in range(52):
        condition = (field >= field_levels[i][0]) & (field <= field_levels[i][1])
        color = colors.index(colors[i])
        color_coordinate_values[condition] = color  
    

    return color_coordinate_values

字符串
但是,最后,颜色没有正确分配,我不知道为什么当我以前在其他数组上尝试时,条件不起作用。如果你对我如何以不同的方式将这些颜色值分配给字段值以最终直观地表示它们的大小有想法,那么我也对这些想法持开放态度。- 谢谢你-谢谢

sshcrbum

sshcrbum1#

考虑一种更简单的方法来完成此操作,如下所示:

def field_view(field):
    min_ = field.min()
    max_ = field.max()
    green = (255 * (max_ - field)) // (max_ - min_)
    return np.pad(green[:, :, None],  # pad the green values with 255 and 0
                  ((0, 0), (0, 0), (1, 1)),
                  constant_values=((255, 0)))  

print(field_view(np.array([[0,1,2], [3,4,5], [6,9,7]])))

字符串
或者:

def field_view(field):
    def const(n):
        return np.full_like(field, n)

    return np.transpose([
        const(255),
        (255 * (field.max() - field)) // field.ptp(),
        const(0)
    ], (1,2,0))

相关问题