我想用matplotlib绘制一个3D直方图,从三个列表看起来像:
x = [random.randint(0, 12) for i in range(101)]
y = [random.randint(0, 12) for i in range(101)]
z = [random.random() for i in range(101)]
关键是x和y轴必须在0到12之间,并且每个(x,y)bin必须表示满足每个(x,y)标准的所有z值的平均值。例如,让我们想象一下
x[0] = 5
y[0] = 3
z[0] = 0.8
可能会发生:
x[25] = 5
y[25] = 3
z[25] = 0.6
所以直方图必须在坐标(x,y)=(5,3)上放置一个0.7高的bin(所有x = 5和y = 3的实例的平均值)。
有人对如何以蟒蛇方式进行操作有所了解吗?
最好,非常感谢!
毛。
答案 0 :(得分:1)
看看这个:
import numpy as np
n=101
x = [np.random.randint(0, 12) for i in range(n)]
y = [np.random.randint(0, 12) for i in range(n)]
z = [np.random.random() for i in range(n)]
#coord=[(x[i],y[i]) for i in range(n)]
m=np.asarray([x,y]).transpose()
d=dict()
for i in range(n):
coord=tuple(m[i])
d[coord]=d[coord]+[z[i]] if coord in d else [z[i]]
#for e in d:
# print e,np.asarray(d[e]).mean()
m2=[]
for e in d:
m2.append([list(e)[0],list(e)[1],np.asarray(d[e]).mean()])
m2=np.asarray(m2).transpose()
首先,它通过转置x和y数组来保存坐标。
然后,它创建一个字典来存储每个唯一坐标的z值列表。
最后,它以m2为单位存储每个坐标的平均值,其中'x'= m2 [0],'y'= m2 [1]和'z-mean'= m2 [2]
我认为应该有更好的解决方案, 希望这会有所帮助。