Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy.asmatrix或matplotlib.pyplot.scatter的奇怪行为_Python_Numpy_Matplotlib_Scatter - Fatal编程技术网

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

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

我发现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

如果适用,则
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文档中。