因此,如果我有这段代码,与numpy参考页面上的演示代码基本相同:
import numpy as np
import matplotlib.pyplot as plt
mean = [0,0]
cov = [[1,-0.5], [-0.5,1]]
n = int(input("How many random points?"))
x, y = np.random.multivariate_normal(mean, cov, size = n).T
plt.plot(x,y, 'x')
plt.show()
我不了解第9行结尾处.T的含义,但是如果没有它,程序将给出错误
ValueError: too many values to unpack (expected 2)
有人可以解释此错误以及修复该错误的.T的含义
谢谢
答案 0 :(得分:1)
.T
转置矩阵。因此,在您的情况下,如果使用n=2
,则代码可以正常工作(或至少可以正确运行)而不会进行转置,因为矩阵如:
>>> np.random.multivariate_normal(mean, cov, size = 2)
array([[ 1.4594626 , -0.55863612],
[-1.17139735, -0.36484634]])
可以分为2个数组(x
将是[ 1.4594626 , -0.55863612]
,而y
将是[-1.17139735, -0.36484634]
)。请注意,这不一定是您要查找的内容,并且可能最终会绘制错误的内容(取决于您要执行的操作)。
但是对于任何更大或更小的东西,它不会:
>>> np.random.multivariate_normal(mean, cov, size = 5)
array([[-0.34091962, 2.2368088 ],
[-1.11081547, 0.93089064],
[ 1.45452483, -0.40007311],
[ 0.96038401, 0.26206106],
[ 0.3079481 , 0.66869094]])
因为实际上是要尝试分解为2个变量的5个数组(因此会出现错误)。但是,在转置它时:
>>> np.random.multivariate_normal(mean, cov, size = 5).T
array([[ 0.04466423, 0.88384196, 0.09108559, -2.30473587, 1.58497064],
[ 0.66190894, 0.90202853, 0.31090378, 0.95697681, -0.61557393]])
你很好。您的x
数组将是第一个“行”:[ 0.04466423, 0.88384196, 0.09108559, -2.30473587, 1.58497064]
,而y
将是您的第二个:[ 0.66190894, 0.90202853, 0.31090378, 0.95697681, -0.61557393]
答案 1 :(得分:0)
ndarray.T是行和列的转置。