Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据保存在三个数组中_Python_Python 2.7_Python 3.x_Numpy_Matplotlib - Fatal编程技术网

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())