Python 从三维numpy阵列绘制二维直方图
我有一个形状的3D numpy数组(64200200)。我想绘制一系列沿第1轴迭代的二维直方图,也就是说,我想为每个(200x200)切片绘制一个二维直方图。我试过:Python 从三维numpy阵列绘制二维直方图,python,arrays,numpy,matplotlib,histogram,Python,Arrays,Numpy,Matplotlib,Histogram,我有一个形状的3D numpy数组(64200200)。我想绘制一系列沿第1轴迭代的二维直方图,也就是说,我想为每个(200x200)切片绘制一个二维直方图。我试过: 对于范围内的i(len(a1)-1):#a1是所讨论的数组 plt.hist2d(a1[i,:,0],a1[i,0,:]) plt.show() 但是,我希望沿着第一个轴循环,并将每个2D阵列切片存储在一个名为b1、b2、b3、…b64的阵列系列中,该系列可以在循环本身中生成(手动执行很困难)。然后使用imshow,我可以绘制所
对于范围内的i(len(a1)-1):#a1是所讨论的数组
plt.hist2d(a1[i,:,0],a1[i,0,:])
plt.show()
但是,我希望沿着第一个轴循环,并将每个2D阵列切片存储在一个名为b1、b2、b3、…b64的阵列系列中,该系列可以在循环本身中生成(手动执行很困难)。然后使用imshow,我可以绘制所需的阵列,甚至可以沿着整个系列循环。
请建议这是否可行或是否有更有效的方法。
提前谢谢 我不知道为什么您需要实际创建
b1
,b2
,…,因为您可以按顺序存储它们。另外,我真的不明白你在直方图中画了什么plt.hist2d(a1[i,:,0],a1[i,0,:])
将只使用a1[i]
的第一列和第一行,因此您丢失了大部分数据
无论如何,如果您希望将a1
的每个子数组放在单独的柱状图中,则最简单的数据块方法是np.split
对于映射中的bi(np.squence,np.split(a1,len(a1)):
plt.hist2d(bi[:,0],bi[0,:])
np.split
返回数组列表,在本例中,len(a1)==64个数组。它们是a1[0]
,a1[1]
,等等
编辑:添加了np.squage
,因为np.split
返回与输入相同秩的数组。此返回ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
@AMC Edited解释np.split
返回与其输入相同秩的数组这一事实。