将两个列表转换为矩阵

Posted

技术标签:

【中文标题】将两个列表转换为矩阵【英文标题】:Converting two lists into a matrix 【发布时间】:2013-09-14 19:40:32 【问题描述】:

我会尽量讲清楚,首先我会解释我为什么要将两个数组转换成一个矩阵。

要绘制投资组合与市场指数的表现,我需要一个类似以下格式的数据结构:

[[portfolio_value1, index_value1]
 [portfolio_value2, index_value2]]

但我将数据作为两个单独的一维数组:

portfolio = [portfolio_value1, portfolio_value2, ...]
index = [index_value1, index_value2, ...]

那么我如何将第二个场景转换为第一个场景。我已经尝试np.insert 将第二个数组添加到我在 python shell 中的测试矩阵中,我的问题是将第一个数组转置为单列矩阵。

任何关于如何在没有命令式循环的情况下实现这一点的帮助都会很棒。

【问题讨论】:

【参考方案1】:

你想要的标准numpy函数是np.column_stack

>>> np.column_stack(([1, 2, 3], [4, 5, 6]))
array([[1, 4],
       [2, 5],
       [3, 6]])

所以用你的 portfolioindex 数组,做

np.column_stack((portfolio, index))

会产生类似的东西:

[[portfolio_value1, index_value1],
 [portfolio_value2, index_value2],
 [portfolio_value3, index_value3],
 ...]

【讨论】:

+1 我不知道这个,比创建一个新数组并使用.T【参考方案2】:

假设投资组合和指数的长度相同:

matrix = []
for i in range(len(portfolio)):
    matrix.append([portfolio[i], index[i]])

或者使用列表理解的单行:

matrix2 = [[portfolio[i], index[i]] for i in range(len(portfolio))]

【讨论】:

结果应该是numpy.array【参考方案3】:

你可以使用 np.c_

np.c_[[1,2,3], [4,5,6]]

它会给你:

np.array([[1,4], [2,5], [3,6]])

【讨论】:

【参考方案4】:

简单的你可以试试这个

a=list(zip(portfolio, index))

【讨论】:

以上是关于将两个列表转换为矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个列表转换为字典(一个列表是键,另一个是值)? [复制]

将矩阵转换为 3 列表('reverse pivot'、'unpivot'、'flatten'、'normalize')

将矩阵转换为 3 列表('reverse pivot'、'unpivot'、'flatten'、'normalize')

如何将矩阵转换为 R 中的列向量列表?

变换列表的平均变换矩阵

将 1.2GB 的边列表转换为稀疏矩阵