我有一个像这样的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])
现在我想绘制2d直方图,其中(x,y)(out [(x,y))是坐标,第三个值是出现次数。我尝试使用普通的matplotlib图,但是我每个坐标都有这么多的值(我需要1920x1080),程序需要太多的内存。
答案 0 :(得分:1)
如果我理解正确,您需要尺寸为1920x1080的图像,该图像根据(x, y)
的值为坐标out[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]
。这表明此处并不真正需要indices_zero_grid
。
plt.imshow
可以接受一个形状数组(1920,1080)。此数组在数组中的每个位置都有一个标量值。数组的结构告诉imshow
每个单元格的颜色。与散点图不同,您不需要自己生成坐标。