如何使用对应的RGB数组绘制2D numpy坐标数组?

3

我有一个二维numpy坐标数组(x,y),其尺寸为40000x2,我要将它们输入到机器学习模型中。我将预测结果转换为具有40000x3尺寸的RGB numpy数组。RGB数组中的每个条目(行)对应于坐标数组相同条目。

我想要能够快速绘制所有内容。之前,我尝试使用scatter()函数,但是它太慢了。

# Fragment of code I used before
# coordArray (40000x2), rgbArray (40000x3)

f, ax = plt.subplots(figsize=(7, 7))
for i in range(len(coordArray)):
    ax.scatter(coordArray[i, 0], coordArray[i, 1], marker='o', 
    c=rgbArray[i], s=1.5, alpha=1)
plt.show()

我在想是否有更好/更快的方法来绘制数据。作为参考,我也正在绘制我的训练集和测试集(只是在代码片段中没有显示出来)。

2个回答

1
你可以创建一个适当的np.array,并使用来自rgbArray的值填充坐标。然后使用plt.imshow绘制数组。缺失的坐标将被绘制为黑色。
import numpy as np
import matplotlib.pyplot as plt

#Example with 3 coordinates in a 2x2 array
# [0,0] -> red
# [0,1] -> green
# [1,1] -> blue
# [1,0] -> 'no information'
coord = np.array([[0,0],[0,1],[1,1]])
rgb = np.array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])

img = np.zeros(tuple(coord.max(0)+1)+(3,))

img[coord[:,0],coord[:,1]] = rgb
plt.imshow(img)
plt.axis('off');

输出:

image from coordinates


如果您想要一个散点图,就无需遍历数组。您可以使用以下代码:
plt.scatter(coord[:,0],coord[:,1], color=rgb, s=20);

输出:

scatter plot of same data


有没有办法使用浮点数?我的坐标数组大多由浮点数组成。 - What_Is_CoMpUtErScIeNcE
你可以在 rgb 数组中直接使用 floats。这甚至更简单一些。我更新了我的答案,示例数据中使用了 floats - Michael Szczesny
对于坐标数据,我需要一个示例。在这种情况下,不需要迭代的“scatter”解决方案可能更合适。对于“imshow”方法,我们可以使用MinMaxTransform并转换为int - Michael Szczesny
如果坐标值不是整数,这种方法将无法工作。 - Tonechas

1
使用向量化代码可能会加速绘图:
f, ax = plt.subplots(figsize=(7, 7))
ax.scatter(coordArray[:, 0], coordArray[:, 1], 
           marker='o', c=rgbArray/255, s=1.5, alpha=1)
plt.show()

请注意,rgbArray的条目必须在[0,1]范围内。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接