Python 什么';将数据帧转换为位图更有效的方法是什么?
我有一个熊猫数据框,有3列(x,y,d),大约有200000行x和y是整数,表示网格的位置d表示栅格的点密度。大约有90行丢失(不包括在df中),所有这些行的d都为0 我想将数据帧绘制成一个501*501像素,每个像素的颜色由其对应的d确定 我可以使用numpy、matplotlib和PIL来实现它,图像如下所示:然而,运行时大约为16s。我想知道还有什么可以提高性能的吗 代码如下: 最后一步,遍历数据帧并对像素着色是最耗时的(~16s),我可以使用其他方法吗?多谢各位 更新:Python 什么';将数据帧转换为位图更有效的方法是什么?,python,pandas,numpy,matplotlib,python-imaging-library,Python,Pandas,Numpy,Matplotlib,Python Imaging Library,我有一个熊猫数据框,有3列(x,y,d),大约有200000行x和y是整数,表示网格的位置d表示栅格的点密度。大约有90行丢失(不包括在df中),所有这些行的d都为0 我想将数据帧绘制成一个501*501像素,每个像素的颜色由其对应的d确定 我可以使用numpy、matplotlib和PIL来实现它,图像如下所示:然而,运行时大约为16s。我想知道还有什么可以提高性能的吗 代码如下: 最后一步,遍历数据帧并对像素着色是最耗时的(~16s),我可以使用其他方法吗?多谢各位 更新: 在我的代码中,
在我的代码中,我没有使用[]操作符,而是使用.at[]对数据帧进行索引。运行时间提高了100%(~8s)。然而,我仍然想知道如何进一步改进它 使用
像素
作为三维数组,我们可以以矢量化的方式分配-
pixels = np.zeros((501,501,3),dtype=np.uint8)
pixels[df['x'], df['y']] = np.vstack(df['d'].values)
熊猫数据帧可以很容易地用枕头转换成图像。希望这些语法能帮助你解决这个问题
dataframe = pd.read_csv('A.csv'), header=None)
dataframe.to_numpy()
# create Pillow image
image = Image.fromarray(dataframe, 'L') # L is mode for grayscale
print(type(image))
# summarize image details
print(image.mode)
print(image.size)
#save image
img_filename = 'A.bmp'
image.save(img_filename)
print('saved:', img_filename)
使用像素数组怎么样:
pixels=np.zero((501501,3),dtype=np.uint8)
?@Divakar谢谢你的建议。我曾尝试将数组用于像素,但对运行时没有帮助。我在想是不是访问熊猫数据帧太贵了?
dataframe = pd.read_csv('A.csv'), header=None)
dataframe.to_numpy()
# create Pillow image
image = Image.fromarray(dataframe, 'L') # L is mode for grayscale
print(type(image))
# summarize image details
print(image.mode)
print(image.size)
#save image
img_filename = 'A.bmp'
image.save(img_filename)
print('saved:', img_filename)