熊猫 - 如何从列表中制作矩阵?

时间:2017-08-08 13:32:50

标签: python pandas numpy

我有一个项目清单。我想制作一个矩阵(或三角矩阵),其中行和列是项目,矩阵值是f(x, y),其中f是一个函数,x, y是索引

如果可以使用支持并行计算的实现(即map()),这是理想的。

什么是最干净的方式?

2 个答案:

答案 0 :(得分:1)

我认为这可能是你想要的:

import pandas as pd
import numpy as np

listofitems = ['apple', 'pear', 'banana', 'grape']

df = pd.DataFrame(np.matrix(np.random.rand(4,4)), columns=listofitems, index=listofitems)

enter image description here

然后获取f(x,y)

df['banana']['pear']
>> 0.34471005596459292

您可以使用np.triunp.tril将其设为三角形,例如

df = pd.DataFrame(np.tril(np.matrix(np.random.rand(4,4))), columns=listofitems, index=listofitems) enter image description here

答案 1 :(得分:0)

您可以使用numpy.meshgrid()从列表中创建网格,然后评估每个单元格上的函数。

a = np.array([1,2,3,4])
xx, yy = np.meshgrid(a,a)
z = xx + yy
# out: array([[2, 3, 4, 5],
#             [3, 4, 5, 6],
#             [4, 5, 6, 7],
#             [5, 6, 7, 8]])

您还可以编写更复杂的功能:

def f(xx, yy):
    return np.sin(yy) + np.cos(xx)
z = f(xx, yy)
# out: array([[ 1.38177329,  0.42532415, -0.14852151,  0.18782736],
#             [ 1.44959973,  0.49315059, -0.08069507,  0.25565381],
#             [ 0.68142231, -0.27502683, -0.84887249, -0.51252361],
#             [-0.21650019, -1.17294933, -1.74679499, -1.41044612]])