为了账号安全,请及时绑定邮箱和手机立即绑定

使用 numpy.random.multivariate_normal 时 .T 的含义

使用 numpy.random.multivariate_normal 时 .T 的含义

SMILET 2021-06-30 15:05:31
因此,如果我有这段代码,它与 numpy 参考页面上的 Demonstartion 基本相同:import numpy as npimport matplotlib.pyplot as pltmean = [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).Tplt.plot(x,y, 'x')plt.show()我不明白第 9 行末尾的 .T 的含义,但没有它,程序会给出错误ValueError: too many values to unpack (expected 2)有人可以解释这个错误以及修复它的 .T 的含义吗
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

.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]])

因为这本质上是您尝试将 5 个数组解压缩为 2 个变量(因此出现错误)。但是,当您转置它时:


>>> 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]


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信