Python 将从文件读取的int或float列表转换为numpy数组

Python 将从文件读取的int或float列表转换为numpy数组,python,numpy,parsing,file-processing,Python,Numpy,Parsing,File Processing,我必须从文件中读取一堆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]) 我现在就是这样做的。有没有更好的方法可以消除

我必须从文件中读取一堆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循环

关于这一点,我还有其他问题:

  • 我如何处理某些列是int而其他列是float的情况,因为numy数组不能处理多种数据类型

  • 另外,如果文件的格式不是我期望的格式,我如何抛出异常?只要举几个例子就可以了


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

    np.genfromtxt()
    为数组推断
    np.float64
    ,前提是混合了
    int
    s和
    float
    s,但如果要明确描述可以使用的类型:

    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')])
    
    np.genfromtxt(StringIO(数据),[np.int32,np.int32,np.float,np.int32])
    出[]:
    数组([(1,2,2.2,3),(3,4,4.1,2)],
    
    dtype=[('f0',您的
    NEls
    变量是什么?您可以始终使用列表理解进行优化。此外,
    range()
    默认从0开始,因此您可以只指定上限(不包括在内)。如果我设置了必须读入特定数组的行数,该怎么办?例如,我有一个变量“NEls”,它包含数组的行数。
    np.genfromtxt()
    有一个
    max_rows
    参数,所以只要设置
    max_rows=NEIs
    ,如果需要将它分块放入
    NEIs
    中,则将其全部读入,然后只需
    重塑()。
    
    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')])