python - 使用 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 的含义吗
谢谢
解决方案
.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]
推荐阅读
- javascript - Dynamically created get's lower position why?
- javascript - WEBGL-FBO:为什么渲染调用后 DEPTH_COMPONENT 纹理为空白
- excel - 如何将 VBA .xlam 项目解构为 .cls 和 .frm 文件?
- javascript - 创建 javascript 输入
- c# - Page.xaml 作为其他页面的模型
- python - 加快 Numpy 中的 nd-array 计算
- python - 有没有办法增加 Spyder 中最近项目的最大数量?
- python - 文档图像有哪些好的数据增强技术?
- c++ - 为自动微分 (AD) 类型调整 CwiseUnaryOperation 产生的 Eigen::Matrix
- python - 为什么我的 5 层 RSA 加密不能正常工作?解密没有返回正确的值