Python 为什么在生成小倍数的代码中需要numpy.ravel()?
我找到了一些代码来生成一组,它工作得非常好Python 为什么在生成小倍数的代码中需要numpy.ravel()?,python,numpy,matplotlib,Python,Numpy,Matplotlib,我找到了一些代码来生成一组,它工作得非常好 fig, axes = plt.subplots(6,3, figsize=(21,21)) fig.subplots_adjust(hspace=.3, wspace=.175) for ax, data in zip(axes.ravel(), clean_sets): ax.plot(data.ETo, "o") ax的行,zip中的数据(axes.ravel(),clean_set):contians.ravel(
fig, axes = plt.subplots(6,3, figsize=(21,21))
fig.subplots_adjust(hspace=.3, wspace=.175)
for ax, data in zip(axes.ravel(), clean_sets):
ax.plot(data.ETo, "o")
ax的行,zip中的数据(axes.ravel(),clean_set):
contians.ravel()
,但我不明白这到底在做什么,也不明白为什么有必要这样做
如果我看一下,我会发现:
返回一个连续的展开数组
返回一个包含输入元素的一维数组。只有在需要时才制作副本
我猜与plt.subplot()
中的轴对应的返回是一个无法迭代的多维数组,但我真的不确定。如能简单解释,将不胜感激
在这种情况下使用
.ravel()
的目的是什么?您的猜测是正确的plt.subplot()
根据输入返回多个轴的Axes
或numpy
数组。如果二维网格由参数nrows
和ncols
定义,则返回的numpy
数组也将是二维数组
此行为在挤压
参数内部解释
挤压
:bool,可选,默认值:True如果为True,则会从返回的轴对象中挤出额外的尺寸:
- 如果只构造了一个子地块(nrows=ncols=1),则生成的单轴对象将作为标量返回
- 对于Nx1或1xN子批次,返回的对象是一个1D numpy对象数组,轴对象作为numpy 1D数组返回
- 对于NxM,N>1和M>1的子批次作为2D数组返回
plt.子图(6,3)
,因此N>1,M>1
,结果对象必然是一个2D数组,与挤压
的设置无关
这使得有必要展平此阵列,以便能够zip
。选择是
zip(axes.ravel())
zip(axes.flatte())
zip(轴平)
- 你的猜测是正确的
plt.subplot()
根据输入返回多个轴的Axes
或numpy
数组。如果二维网格由参数nrows
和ncols
定义,则返回的numpy
数组也将是二维数组
此行为在挤压
参数内部解释
挤压
:bool,可选,默认值:True如果为True,则会从返回的轴对象中挤出额外的尺寸:
- 如果只构造了一个子地块(nrows=ncols=1),则生成的单轴对象将作为标量返回
- 对于Nx1或1xN子批次,返回的对象是一个1D numpy对象数组,轴对象作为numpy 1D数组返回
- 对于NxM,N>1和M>1的子批次作为2D数组返回
plt.子图(6,3)
,因此N>1,M>1
,结果对象必然是一个2D数组,与挤压
的设置无关
这使得有必要展平此阵列,以便能够zip
。选择是
zip(axes.ravel())
zip(axes.flatte())
zip(轴平)
轴
以在图形中绘图。我相信clean_set
具有要在每个轴上绘图的数据。我相信len(干净的套装)
18岁。现在要在每个轴上绘制所有18个集。但是axes.shape是(6,3)
。也就是说,如果您想访问第10个轴来绘制第10个清洁集
,您必须访问轴[1][3],但使用axes.ravel()
,它是axes.ravel()[9]
。现在的绑定是线性的。换句话说,从轴的n*n矩阵现在,你有了轴的1-d数组。你正在创建6行3列的轴
来在你的图形中绘图。我相信clean_set
有你想要在每个轴上绘图的数据。我相信len(干净的套装)
18岁。现在要在每个轴上绘制所有18个集。但是axes.shape是(6,3)
。也就是说,如果您想访问第10个轴来绘制第10个清洁集
,您必须访问轴[1][3],但使用axes.ravel()
,它是axes.ravel()[9]
。现在的绑定是线性的。换句话说,从轴的n*n矩阵现在,你有了轴的一维数组。