如何调用参数为矩阵的函数?

2024-04-27 15:04:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用四个不同的mu和sigma参数调用^{}。然后对于每个生成的概率密度函数,我需要调用一个数组,比如10个值。在

为了简单起见,我们假设上面提到的函数是addXY

def addXY(x, y):
    return x+y

params=[[1,2],[1,3],[1,4],[1,5]]       # mu and sigma, four versions
inputs=[1,2,3]                         # values, in this case 3 of them

matrix = []
for pdf_params in params:
    row = []
    for inp in inputs:
        entry = addXY(*pdf_params) 
        row.append(entry*inp)
    matrix.append(row)
print matrix
  1. 这是Python吗?

  2. 有没有一种方法可以传递参数和输入,并得到一个包含所有组合的矩阵,使其更加python化/矢量化/更快?

啊!重要注意:示例中的输入是标量值(为了简化问题描述,我设置了标量值,实际上我使用的是n维向量数组,因此,多变量\u normal pdf)。在

欢迎提供类似操作的提示和提示。在


Tags: infor参数pdf数组paramssigmamatrix
2条回答

这只是我的想法,以缩短代码和利用更多的库。在

实际上,在您的代码中,您没有使用numpy,scipy。问题是你是否愿意使用数字阵列用于进一步的数据处理。在

选项1:只需使用list来表示数组,使用list of list来表示矩阵:

from itertools import product
matrix_list = [sum(param)*input_x for param, input_x in product(params, inputs)]
matrix = zip(*[iter(matrix_list)]*len(inputs))
print matrix

使用zip方法的学分应给予 convert a flat list to list of list in python

选择2:使用数字阵列以及numpy.matrix公司用于进一步处理

^{pr2}$

根据您对要计算的内容的描述,您不需要multivariate_normal。对于一个具有标量mu和sigma的发行版,您将使用一组标量值调用PDF方法。所以您可以使用pdf()方法^{}。此方法将broadcast其参数,因此通过传入具有适当形状的数组,您可以在一次调用中计算mu和sigma的不同值的PDF。这里有一个例子。在

以下是您的x值(您称之为inputs),以及参数:

In [23]: x = np.array([1, 2, 3])

In [24]: params = np.array([[1, 2], [1, 3], [1, 4], [1, 5]])

为了方便起见,将参数分为mu和sigma值的数组。在

^{pr2}$

我们将使用scipy.stats.norm来计算PDF。在

In [27]: from scipy.stats import norm

此调用计算x和参数的所需组合的PDF。mu.reshape(-1, 1)和{}是具有形状(4,1)的2D数组。x具有形状(3,),因此当这些参数被广播时,结果具有形状(4,3)。每一行是在x处对mu和sigma中的一对进行计算的PDF。在

In [28]: p = norm.pdf(x, loc=mu.reshape(-1, 1), scale=sig.reshape(-1, 1))

In [29]: p
Out[29]: 
array([[ 0.19947114,  0.17603266,  0.12098536],
       [ 0.13298076,  0.12579441,  0.10648267],
       [ 0.09973557,  0.09666703,  0.08801633],
       [ 0.07978846,  0.07820854,  0.07365403]])

换句话说,p的行是:

norm.pdf(x, loc=mu[0], scale=sig[0])
norm.pdf(x, loc=mu[1], scale=sig[1])
norm.pdf(x, loc=mu[2], scale=sig[2])
norm.pdf(x, loc=mu[3], scale=sig[3])

相关问题 更多 >