将从文件读取的整数或浮点数列表转换为 numpy 数组

Converting a list of ints or floats read from a file to a numpy array

我有一堆 int 值,我必须从文件中读取这些值并将其存储在一个 numpy 数组中。我是这样做的:

el_connect = np.zeros([NEls,3],dtype=int)
for i in range(0,NEls):
    connct = file.readline().strip().split()
    for j in range(0,len(connct)):
        el_connect[i,j] = int(connct[j])

这就是我目前的做法。有没有更好的方法可以消除第二个 for 循环?

我对此还有其他问题:

  1. 由于numpy数组无法处理多种数据类型,如何处理某些列为int而其他列为float的情况?

  2. 另外,如果文件格式不符合我的预期,我该如何抛出异常?举几个例子就可以了。

你可以通过使用 np.genfromtxt() 假设 space 分隔值(我从上面的代码推断)来摆脱这两个循环。

In []:
data = '''1 2 2.2 3
3 4 4.1 2'''

np.genfromtxt(StringIO(data))     # Replace `StringIO(data)` with filename

Out[]:
array([[1. , 2. , 2.2, 3. ],
       [3. , 4. , 4.1, 2. ]])

np.genfromtxt() 为数组推断 np.float64 如果你混合了 ints 和 floats 但如果你想明确描述你可以使用的类型:

np.genfromtxt(StringIO(data), [np.int32, np.int32, np.float, np.int32])

Out[]:
array([(1, 2, 2.2, 3), (3, 4, 4.1, 2)],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f8'), ('f3', '<i4')])