我是python新手。我问了另一个问题,如何安排三个列表,这样的方式,相应的元素的总和,如果更大,然后出现在第一个?现在问题如下:
我正在处理一个大型文本文件,其中有419040行和6列包含浮动。其中,我取前3列来生成这三个列表。因此,我实际上正在处理的列表中每个列表有419040个条目。当我运行python代码将三列提取到三个列表时,python shell没有响应,我怀疑这是大量的条目,我使用了以下代码:
file=open("file_location","r")
a=[]
b=[]
c=[]
for lines in file:
x=lines.split(" ")
a.append(float(x[0]))
b.append(float(x[1]))
c.append(float(x[2]))
注意:对于小文件,这段代码运行得很好。为了避免这个问题,我使用以下代码:
import numpy as np
a = []
b = []
c = []
a,b,c = np.genfromtxt('file_location',usecols = [0,1,2], unpack=True)
所以当我运行在回答我之前的问题给出的代码时,同样的问题正在发生。那么使用numpy对应的代码是什么呢?或者,还有其他的解吗?
如果您打算使用numpy,那么我建议使用ndarray
s,而不是列表。您可以使用loadtxt
,因为您不必处理丢失的数据。我想那会更快。
a = np.loadtxt('file.txt', usecols=(0, 1, 2))
a
现在是一个二维数组,存储为np.ndarray
数据类型。它应该看起来像:
>>> a
array([[ 1, 20, 400],
[ 5, 30, 500],
[ 3, 50, 100],
[ 2, 40, 300],
[ 4, 10, 200]])
但是,您现在需要重新执行在上一个问题中所做的操作,但是使用numpy数组而不是列表。这很容易实现,像这样:
>>> b = a.sum(axis=1)
>>> b
Out[21]: array([535, 421, 342, 214, 153])
>>> i = np.argsort(b)[::-1]
>>> i
Out[26]: array([0, 1, 2, 3, 4])
>>> a[i, :]
Out[27]:
array([[ 5, 30, 500],
[ 1, 20, 400],
[ 2, 40, 300],
[ 4, 10, 200],
[ 3, 50, 100]])
所涉及的步骤在这里有更详细的描述。