Python 将数据保存在三个数组中
我有这个档案:Python 将数据保存在三个数组中,python,python-2.7,python-3.x,numpy,matplotlib,Python,Python 2.7,Python 3.x,Numpy,Matplotlib,我有这个档案: 1 2 3 2 1 3 7 8 9 4 5 3 我想要的是创建三个数组,这样保存数据: 在第一个数组中,数据将是:1、2、7、4 在第二个数组中,数据将是:2、1、8、5 在第三个数组中,数据将是:3、3、9、3 我想,在第一次我必须得到的列数这样做,但我不知道这是否是可能的 我想我可以读取所有的行并将数据逐行保存在一个数组中,然后创建三个数组,其中包含我想要的内容,但这不是最好的。所以这就是我问你是否有更好的想法来做这件事的原因 多谢各位 如果所有行都包含相同数量的列,您只需
1 2 3
2 1 3
7 8 9
4 5 3
我想要的是创建三个数组,这样保存数据:
在第一个数组中,数据将是:1、2、7、4
在第二个数组中,数据将是:2、1、8、5
在第三个数组中,数据将是:3、3、9、3
我想,在第一次我必须得到的列数这样做,但我不知道这是否是可能的
我想我可以读取所有的行并将数据逐行保存在一个数组中,然后创建三个数组,其中包含我想要的内容,但这不是最好的。所以这就是我问你是否有更好的想法来做这件事的原因
多谢各位 如果所有行都包含相同数量的列,您只需使用:
with open(filename,'r') as file:
data = zip(*[[int(x) for x in line.split()] for line in file])
现在数据将是:
data == [(1, 2, 7, 4), (2, 1, 8, 5), (3, 3, 9, 3)]
因此,如果需要列表,您可以将它们映射到list
s,然后使用例如序列分配来获得列,如:
with open(filename,'r') as file:
col1,col2,col3 = map(list,zip(*[[int(x) for x in line.split()] for line in file]))
如果有更多的列,而您对它们不感兴趣,您可以使用*.
捕捉其他列(并忽略它们)。比如:
您可以读取、
split
和zip
(一种转换数据的方式),在分割后转换为整数
with open("file.txt") as f:
s = list(zip(*([int(x) for x in l.split()] for l in txt)))
结果:
[(1, 2, 7, 4), (2, 1, 8, 5), (3, 3, 9, 3)]
假设你自己已经打开了文件对象,这个怎么样
array = [line.split(" ") for line in file]
x, y, z = zip(*array)
x、 y、y和z现在将分别保存第一列、第二列和第三列。首先定义文件的数组和路径:
path = ...
arr = []
然后迭代文件的每一行:
with open(path) as f:
for line in f:
arr.append(line.split(" "))
这与大小无关,这意味着阵列可以任意长或宽
但是,如果整数的大小和长度是固定的,则可以使用:
arr.append([line[0], line[2], line[4]]) # For one digit numbers, 3 columns
arr.append([line[0:1], line[3:4], line[5:6]]) # For 2 digit numbers, 3 columns
在第一种情况下,0、2和4是数字的位置,与我在第二种情况下所做的类似
使用
arr[0]
、arr[1]
或arr[2]
获取列数。或者arr[x][y]
获取特定数字。可能尝试使用Numpy。将文件读取为矩阵,然后将其转置
from numpy import *
a = mat('1, 2, 3; 2, 1, 3; 7, 8, 9; 4, 5, 3')
b = transpose(a)
如果您将在以后做任何基于数组的操作,请考虑使用。它有许多操作的高级接口
import numpy as np
data = np.loadtxt(fname)
# either separate out copies of the arrays explicitly
col1 = data[:,0]
col2 = data[:,1]
col3 = data[:,2]
# or just operate directly on a column (or row), e.g.
print(data[:,1].max())
看一看
a=numpy.genfromtxt(file,unpack=True)
应该可以做到这一点(它将返回一个二维numpy数组,使得a[i]
是文件的第i列)。创建三个数组,逐行读取文件。在每次迭代中,按空格分割行,并将部分添加到相应的数组中。请注意,x
、y
和z
将不会列出。您只为zip
的输出生成了一个列表。由于您执行序列赋值,这是非常无用的。确实,您可以直接对迭代器执行多重赋值。我将编辑列表功能。你会得到相同的答案——x,y和z都是元组,据我所知,这很好,这个问题没有要求列表。这里你(a)假设所有整数都是一位数长,(b)你用元组构造一个列表,所以每行一个元素。好的,我会解决这个问题
arr.append([line[0], line[2], line[4]]) # For one digit numbers, 3 columns
arr.append([line[0:1], line[3:4], line[5:6]]) # For 2 digit numbers, 3 columns
from numpy import *
a = mat('1, 2, 3; 2, 1, 3; 7, 8, 9; 4, 5, 3')
b = transpose(a)
import numpy as np
data = np.loadtxt(fname)
# either separate out copies of the arrays explicitly
col1 = data[:,0]
col2 = data[:,1]
col3 = data[:,2]
# or just operate directly on a column (or row), e.g.
print(data[:,1].max())