我有一个大熊猫数据框,其中的X,Y和I列。X和Y是像素坐标,我想说是0到255之间的强度值,我想在相应的X和Y处显示它位置。
该图像的每个像素都没有一个条目,因此未在数据框中列出的所有像素的I值都设置为0。
因此,我使用图像尺寸初始化了一个二维数组img
。然后,我已经尝试过类似
img.at[df.X,df.Y] = df.I
这不起作用。我认为一个简单的for
循环可以解决此问题,但是我想知道是否有更有效的方法(例如,调用花哨的numpy / opencv /任何我不知道的函数。。 )。
答案 0 :(得分:1)
您应该像这样使用Pandas的pivot功能:
df.pivot('Y', 'X', 'I').values
这将导致如下所示:
# array([[ 255, 34],
# [ 56, nan]])
然后,您只需要将nan
值替换为0。
答案 1 :(得分:1)
最简单的方法可能是使用scipy.sparse
数组,因为coo_matrix
的构建与输入相同。
from scipy.sparse import coo_matrix
sparse_image = coo_matrix((df.I, (df.X, df.Y)), shape = image.shape)
image = sparse_image.todense()
如果在此步骤之前累积coo_matrix
值, I
也具有一些不错的功能。