gpt4 book ai didi

python - np.loadtxt 用于包含多个矩阵的文件

转载 作者:行者123 更新时间:2023-11-30 22:34:22 24 4
gpt4 key购买 nike

我有一个看起来像这样的文件:

some text
the grids are
3 x 3

more text

matrix marker 1 1
3 2 4
7 4 2
9 1 1

new matrix 2 4
9 4 1
1 3 4
4 3 1

new matrix 3 3
7 2 1
1 3 4
2 3 2

.. 文件继续,几个 3x3 矩阵以相同的方式出现。每个矩阵都以带有唯一 ID 的文本开头,尽管 ID 对我来说并不是特别重要。我想创建这些矩阵的矩阵。我可以使用 loadtxt 来做到这一点吗?

这是我最好的尝试。此代码中的 6 可以替换为从 6 开始并按矩阵中的行数递增的迭代变量。我以为 skiprows 会接受列表,但显然它只接受整数。

np.loadtxt(fl, skiprows = [x for x in range(nlines) if x not in (np.array([1,2,3])+ 6)])

TypeError Traceback (most recent call last)
<ipython-input-23-7d82fb7ef14a> in <module>()
----> 1 np.loadtxt(fl, skiprows = [x for x in range(nlines) if x not in (np.array([1,2,3])+ 6)])

/usr/local/lib/python2.7/site-packages/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)
932
933 # Skip the first `skiprows` lines
--> 934 for i in range(skiprows):
935 next(fh)
936

最佳答案

也许我误解了,但如果您可以匹配 3x3 矩阵前面的行,那么您可以创建一个生成器来提供给 loadtxt:

import numpy as np

def get_matrices(fs):
while True:
line = next(fs)
if not line:
break
if 'matrix' in line: # or whatever matches the line before a matrix
yield next(fs)
yield next(fs)
yield next(fs)


with open('matrices.dat') as fs:
g = get_matrices(fs)
M = np.loadtxt(g)

M = M.reshape((M.size//9, 3, 3))
print(M)

如果你喂它:

some text
the grids are
3 x 3

more text

matrix marker 1 1
3 2 4
7 4 2
9 1 1

new matrix 2 4
9 4 1
1 3 4
4 3 1

new matrix 3 3
7 2 1
1 3 4
2 3 2

new matrix 7 6
1 0 1
2 0 3
0 1 2

你得到一个矩阵数组:

[[[ 3.  2.  4.]
[ 7. 4. 2.]
[ 9. 1. 1.]]

[[ 9. 4. 1.]
[ 1. 3. 4.]
[ 4. 3. 1.]]

[[ 7. 2. 1.]
[ 1. 3. 4.]
[ 2. 3. 2.]]

[[ 1. 0. 1.]
[ 2. 0. 3.]
[ 0. 1. 2.]]]

或者,如果您只想产生看起来可能是 3x3 整数矩阵中的行的所有行,请匹配正则表达式:

import re

def get_matrices(fs):
while True:
line = next(fs)
if not line:
break
if re.match('\d+\s+\d+\s+\d+', line):
yield line

关于python - np.loadtxt 用于包含多个矩阵的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com