python:将数字从文本文件加载到跳过某些条目的数组

时间:2016-01-20 22:37:07

标签: python arrays numpy

我退出了编程新手,所以我很抱歉打扰你一个非常简单的问题。

我有连续写的.txt数字(但有间距)。使用python,我想创建并保存维度= 10的数组,只要它们不具有等于零的所有条目。

例如,我的data.txt写成如下:

0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 0 7 8 9 0 32 47 5 87 4 65 78 90 94 22 0 0 0 0 0 0 0 0 0 0 3 2 4 6 5 2 1 4 6 5 

我想以10个为单位扫描文件中的所有数字(这是我的向量的维度),如果所有条目都为零,则不要保存;否则保存在维数= 10的数组中。

我想要的结果是

a= [1 2 3 4 5 0 7 8 9 0]

b= [32 47 5 87 4 65 78 90 94 22]

c= [3 2 4 6 5 2 1 4 6 5]
然后我需要使用这个向量来计算皮尔逊相关函数。

希望问题很清楚。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

你去吧。代码已经过测试,但您需要添加文件读取部分

def not_zeroes(arr):
    return any([x!=0 for x in arr])

vectors = []
for line in open('myfile.txt'):

    numbers = list(map(float,line.split()))
    for i in range(0, len(numbers), 10):
        vector = numbers[i:i+10]
        if not_zeroes(vector):
            vectors.append(vector)
print vectors

答案 1 :(得分:1)

在交互式shell中一步一步。

你的字符串:

>>> st='0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 0 7 8 9 0 32 47 5 87 4 65 78 90 94 22 0 0 0 0 0 0 0 0 0 0 3 2 4 6 5 2 1 4 6 5'

该字符串作为整数列表:

>>> map(int, st.split())
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 7, 8, 9, 0, 32, 47, 5, 87, 4, 65, 78, 90, 94, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 6, 5, 2, 1, 4, 6, 5]

每个10个整数的元组中的列表:

>>> zip(*[iter(map(int, st.split()))]*10)
[(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (1, 2, 3, 4, 5, 0, 7, 8, 9, 0), (32, 47, 5, 87, 4, 65, 78, 90, 94, 22), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0), (3, 2, 4, 6, 5, 2, 1, 4, 6, 5)]

现在过滤掉只有零的元组:

>>> [t for t in zip(*[iter(map(int, st.split()))]*10) if sum(t)]
[(1, 2, 3, 4, 5, 0, 7, 8, 9, 0), (32, 47, 5, 87, 4, 65, 78, 90, 94, 22), (3, 2, 4, 6, 5, 2, 1, 4, 6, 5)]

如果你想要a,b,c拥有这些值(并且你知道你有3个元组:

>>> a,b,c=[t for t in zip(*[iter(map(int, st.split()))]*10) if sum(t)]
>>> a
(1, 2, 3, 4, 5, 0, 7, 8, 9, 0)
>>> b
(32, 47, 5, 87, 4, 65, 78, 90, 94, 22)
>>> c
(3, 2, 4, 6, 5, 2, 1, 4, 6, 5)