我发现了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
答案 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}}
给你这个: