Python numpy.asmatrix或matplotlib.pyplot.scatter的奇怪行为
我发现Python、numpy或matplotlib有一种奇怪的行为 请使用ipython上的pylab执行以下代码:Python numpy.asmatrix或matplotlib.pyplot.scatter的奇怪行为,python,numpy,matplotlib,scatter,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
>>> 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如果适用,则np.asmatrix()
只需将一个iterable转换为矩阵即可。因此:
trans = np.asmatrix(data.T)
np.all( data == trans.T )
应始终给出True
不同绘图的问题在于,在matplotlib.axes.axes.scatter
中,在numpy.ma
模块中执行ravel()
。这里,尽管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()
给你这个:
这两个数字在哪里?您正在同一个图形上绘图。同时,您正在生成随机数据,因此,如果您在没有种子设定的情况下再次运行它,这些图形将看起来不同…抱歉,我的观点与您提到的不同。我的观点不是绘制相同的图形或随机种子,但散布(数据)和散布(trans)不是相同的形状。我无法重现您的错误。这就是全部代码吗?你的意思是你看不到两个数字?我想你可以在第一次散射()时看到一个图形,然后请关闭图形窗口,然后在下一次散射()时你可以看到另一个图形。我的问题是这两个图形应该是相同的形状,但它们不是。是的,但我的意思是,这两个子图形应该是完全相同的形状,但它们不是。我在GitHub中看到了这个问题。当我将矩阵传递给numpy的函数时,我将自己设置为使用numpy.array而不是numpy.matrix。然而,当我想要乘法时,numpy.matrix是简单而有用的。。。无论如何,非常感谢。@keisuke您应该继续使用
np.ndarray
对象,只需执行a.dot(b)
。。。GitHub上的问题仍然没有解决……为了跟进,这已经(更好)记录在案,将在1.4.0文档中。