scipy plot能够绘制多个矢量对,但仅当y的第一维与x的第一维匹配时

roejwanj  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(105)

通过引入一个bug,我发现了matplotlib的一个有趣的特性,我想了解它是如何工作的:

import numpy as np       
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal     
from scipy.spatial import distance

n = 100
X = np.linspace(0, 10, 100).reshape(-1, 1)
D = distance.pdist(X, 'euclidean')
D = distance.squareform(D)
S = np.exp(-D)
mvn = multivariate_normal(np.ones(100), S)
y = [mvn.rvs(1) for i in range(100)]
plt.plot(X, y)
plt.show()

现在这看起来像是画了一个X, y[:, i]的图,i为100。
还是没有?
因为它不适用于:

y = [mvn.rvs(1) for i in range(100)]

然而,这又如预期的那样起作用:

y = np.array([mvn.rvs(1) for i in range(5)])
plt.plot(X, y.T)
plt.show()

matplotlib在这里绘制了什么?是X, y[i, :]吗?
所以正确的语法应该是Sample Space, [samples]
非常感谢你的洞察力,我只想策划其中之一,并使自己这个很酷的发现忘记了rvs(1)是足够的。

q35jwt9p

q35jwt9p1#

docsplt.plot(x, y)
如果x和/或y是二维数组,则将为每列绘制一个单独的数据集。如果x和y都是二维数组,则它们必须具有相同的形状。如果其中只有一个是形状为(N,m)的二维数组,则另一个必须具有长度N,并将用于每个数据集m。
这基本上是一个方便的行为,而不是循环手动对您的数据。

相关问题