numpy.asmatrix或matplotlib.pyplot.scatter的奇怪行为

时间:2013-06-19 10:50:53

标签: python numpy matplotlib scatter

我发现了Python,numpy或matplotlib的奇怪行为。

请在ipython上使用pylab执行以下代码:

>>> import numpy as np
>>> import numpy.random as nr
>>> import matplotlib.pyplot as mp
>>> data = nr.rand(50, 2)
>>> mp.scatter(data[:, 0], data[:, 1])
>>> trans = np.asmatrix(data.T)
>>> mp.scatter(trans[0, :], trans[1, :])
>>> all(data == trans.T)

我预计此代码创建的两个数字完全相同, 但他们看起来略有不同。 代码的最后一行也暗示它们完全相同。

有什么问题?

python 2.7.4,IPython 0.13.2,pylab 1.7.1,numpy 1.7.1,matplotlib 1.2.0

1 个答案:

答案 0 :(得分:0)

np.asmatrix()只是将迭代转换为矩阵(如果适用)。所以:

 trans = np.asmatrix(data.T)
 np.all( data == trans.T )

应始终提供True

不同情节的问题在于matplotlib.axes.Axes.scatter ravel() numpy.ma(蒙面数组)模块中执行data==trans.T。在这里,尽管np.ma.ravel(trans[0,:])np.ravel()返回矩阵而不是扁平数组。要解决此问题,您可以调用fig, axs = mp.subplots(nrows=1, ncols=2, sharey=True ) axs[0].scatter(data[:, 0], data[:, 1]) trans = np.asmatrix(data.T) axs[1].scatter( np.ravel(trans[0,:]), np.ravel(trans[1,:]) ) fig.tight_layout() ,这适用于非掩码数组。我打开this issue in GitHub来报告这个,这可能是一个错误......

结果将是:

{{1}}

给你这个:

enter image description here