Python 从二维numpy数组创建二维直方图

Python 从二维numpy数组创建二维直方图,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一个numpy数组,如下所示: [[[0,0,0], [1,0,0], ..., [1919,0,0]], [[0,1,0], [1,1,0], ..., [1919,1,0]], ..., [[0,1019,0], [1,1019,0], ..., [1919,1019,0]]] 要创建函数,我要感谢@Divakar和@unutbu在其他问题上的帮助: def indices_zero_grid(m,n): I,J = np.ogrid[:m,:n] out = np

我有一个numpy数组,如下所示:

[[[0,0,0], [1,0,0], ..., [1919,0,0]],
[[0,1,0], [1,1,0], ..., [1919,1,0]],
...,
[[0,1019,0], [1,1019,0], ..., [1919,1019,0]]]
要创建函数,我要感谢@Divakar和@unutbu在其他问题上的帮助:

def indices_zero_grid(m,n):
     I,J = np.ogrid[:m,:n]
     out = np.zeros((m,n,3), dtype=int)
     out[...,0] = I
     out[...,1] = J
     return out
我可以通过以下命令访问此阵列:

>>> out = indices_zero_grid(3,2)
>>> out
array([[[0, 0, 0],
        [0, 1, 0]],

       [[1, 0, 0],
        [1, 1, 0]],

       [[2, 0, 0],
        [2, 1, 0]]])
>>> out[1,1]
array([1, 1,  0])

现在我想绘制二维直方图,其中x,y out[x,y]是坐标,第三个值是出现次数。我曾尝试使用普通matplotlib绘图,但每个坐标的值太多,需要1920x1080,因此程序需要太多内存

如果我理解正确,您需要大小为1920x1080的图像,该图像根据out[x,y]的值在坐标x,y处对像素着色

在这种情况下,您可以使用

import numpy as np
import matplotlib.pyplot as plt

def indices_zero_grid(m,n):
     I,J = np.ogrid[:m,:n]
     out = np.zeros((m,n,3), dtype=int)
     out[...,0] = I
     out[...,1] = J
     return out

h, w = 1920, 1080
out = indices_zero_grid(h, w)
out[..., 2] = np.random.randint(256, size=(h, w))
plt.imshow(out[..., 2])
plt.show()
产生

请注意,没有使用其他两列out[…,0]和out[…,1]。这表明这里并不真正需要索引0网格


plt.imshow可以接受形状为1920、1080的阵列。此数组在数组中的每个位置都有一个标量值。数组的结构告诉imshow在哪里给每个单元格着色。与散点图不同,您不需要自己生成坐标。

您有多少坐标?我有1920 x 1080,这实际上是屏幕分辨率。如果您的屏幕具有该分辨率,则每个条将是一个像素。你确定这就是你想要的吗?为什么不制作一个图像imshow plot或一个曲面?@armatita是的,这是屏幕分辨率。但我需要直方图,因为我想创建某种活动地图。每个坐标的第三个元素是在我的特定应用程序中每个像素的重复级别。考虑添加最小的情况和预期的输出。要创建最小值,您可以使用上一个问题答案中的索引\u zero\u grid3,4。您是对的!这个解决方案非常有效。我真的不需要另外两个专栏,它比前一个专栏工作得更快。我没想过。非常感谢!