将文本文件中的0和1转换为二维数组

3
我收到了一个只有0和1值的文本文件。一个例子是:
010
111
010

我需要将这些值转换成一个二维数组。所以对于这个例子,我应该得到这样的一个数组:
[[0,1,0] , [1,1,1], [0,1,0]]

每个文本文件的列数和宽度都不同,因此我的程序应该能够处理不同的输入矩阵大小。我尝试了以下方法:
numpy.loadtxt("file1.txt")

然而,这给我以下输出数组:
[  10.  111.   10.]

任何指导都将是极好的!

你所写的期望输出是一个Python list。但你想要的是NumPy数组,对吗? - juanpa.arrivillaga
3个回答

4
您不需要使用numpy.readtext。只需使用内置的文件处理程序:
import numpy as np
with open('file1.txt') as f:
    arr = np.array([list(map(int, line.strip())) for line in f])
print(arr)

非常感谢你! - robert ang
@robertang - 也许您想接受这个答案? - aparente001

1
你可以使用np.genfromtxt来获取固定宽度的列。参数delimiter指定每列的宽度。我使用dtype=np.int8以使用最小的占用空间,因为OP说值只会是零或一。
import numpy as np

np.genfromtxt('file1.txt', delimiter=[1, 1, 1], dtype=np.int8)

array([[0, 1, 0],
       [1, 1, 1],
       [0, 1, 0]])

我认为 np.int0 返回的是一个字长大小的 int。最好直接使用 boolnp.int8 - juanpa.arrivillaga

0

你也可以不使用 map 魔法来实现。

import numpy as np

with open('file1.txt') as f:
    arr = np.array([[int(bin) for bin in line] for line in f])
print(arr)

虽然我通常更喜欢使用推导式而不是 mapfilter,但在映射内置函数时,map 比推导式更快,更重要的是,它比嵌套的推导式更易读。但这些差异微不足道。 - juanpa.arrivillaga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接