首页 > 解决方案 > 使用 numpy.random.multivariate_normal 时 .T 的含义

问题描述

因此,如果我的代码与 numpy 参考页面上的 demostartion 基本相同:

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 的含义吗

谢谢

标签: pythonnumpymatplotlib

解决方案


.T转置一个矩阵。因此,在您的情况下,如果n=2没有转置,您的代码将可以正常工作(或者至少可以正常运行),因为矩阵如下:

>>> np.random.multivariate_normal(mean, cov, size = 2)
array([[ 1.4594626 , -0.55863612],
       [-1.17139735, -0.36484634]])

可以分成 2 个数组(x将是[ 1.4594626 , -1.17139735]y将是[-0.55863612, -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]


推荐阅读