我退出了编程新手,所以我很抱歉打扰你一个非常简单的问题。
我有连续写的.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]
然后我需要使用这个向量来计算皮尔逊相关函数。
希望问题很清楚。谢谢你的帮助!
答案 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)