【问题标题】:How to import multiple matrices from a file in Python如何在 Python 中从文件中导入多个矩阵
【发布时间】:2021-02-04 12:52:18
【问题描述】:

我正在寻找一种将N 矩阵从一个文件导入单个 3D 数组的方法。我知道每个矩阵的行数m 和列数n(分别列在两个列表m[N]n[N] 中)。

例如,我有 N=3 这样的矩阵:

1  2   3   4
5  6   7   8
9  10  11  12
1   2   3
4   5   6
7   8   9
10  11  12
1  2  3  4   5   6 
7  8  9  10  11  12

它们分别是维度为3x44x32x6 的矩阵,因此在本例中为m = [3,4,2]n = [4,3,6]。 我会将它们存储在M[i][j][k] 类型的对象中,其中i,j,k 是分别标识矩阵、行和列的索引(在本例中为M[1][2][0]=7)。

例如在 C++ 中,这很容易做到:

ifstream file ("filename.txt");
  for(int i = 0; i < N; i++)
    for(int j = 0; j < m[i]; j++)
      for(int k = 0; k < n[i]; k++)
        file >> M[i][j][k];

file.close();

提前致谢。

【问题讨论】:

  • 你检查过numpynested python list吗?
  • 你能显示M吗?
  • @Epsi95,我通常使用 numpy.genfromtxt 但这里的问题是列数不同。嵌套python列表可能是正确的方法,但我不知道如何导入数据。
  • @python_user 对于上面的例子 M[1][2][0] 会给出 7
  • "我知道每个矩阵的行数 m 和列数 n。"这些 m 和 n 你是怎么得到的?

标签: python python-3.x matrix import


【解决方案1】:

您可以使用itertools.islice 的列表推导式来获得您想要的。 islice 允许您从文件中读取行,而无需将整个文件读入内存。

from itertools import islice

m = [3, 4, 2]
n = [4, 3, 6]

M = []

with open('matrix_data.txt') as file:
    for row_count in m:
        rows = islice(file, row_count) # read `row_count` lines from the file
        rows = [row.split() for row in rows] # split every line in the file on whitespace
        rows = [[int(cell) for cell in row] for row in rows] # convert to int
        M.append(rows) # add to `M`

for matrix in M:
    print(matrix)

输出

[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]

【讨论】:

  • 非常感谢!!所以不需要 n[N]。
  • 不是我建议的方式,m 就足够了,你也可以为答案投票:) 如果它有帮助
  • 如何将 M 转换为 np.ndarray?谢谢
  • 你的意思是一个 3d numpy 数组?
  • 没错!因为这样一来,比如第一个矩阵[1, 2, 3, 4]的第一行就是一个列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2020-12-17
  • 1970-01-01
  • 2014-07-22
  • 2015-03-15
相关资源
最近更新 更多