我有一个套接字,可以从另一台计算机中获取6列10行的60个数字。我用spilit命令他们,输出是完全正确的。关于第一列,我想分别取每个数字来计算它们的移动平均滤波器。
代码:
import socket
import numpy as np
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('192.168.0.1', 2015))
column1 = []
column2 = []
column3 = []
column4 = []
column5 = []
column6 = []
for message in range(10):
message = sock.recv(1024)
a1 = column1.append(message.split()[0])
a2 = column2.append(message.split()[1])
a3 = column3.append(message.split()[2])
a4 = column4.append(message.split()[3])
a5 = column5.append(message.split()[4])
a6 = column6.append(message.split()[5])
b1 =message.split()[0]
b2 = message.split()[1]
b3 = message.split()[2]
b4 = message.split()[3]
b5 = message.split()[4]
b6 = message.split()[5]
print b1
print b2
print b3
print b4
print b5
print b6
如果我只打印b1,输出将是10个数字,我想分别为下一个功能(移动平均滤波器)。我需要帮助才能将它们分开。
我为b1 [i]尝试了一个for循环,但只给了我b1的第一个数字。
答案 0 :(得分:0)
以下内容应该让您入门。我已经以6列10行的格式创建了一些随机数据。然后它将原始数据拆分成行,将每一行拆分成列,然后转换它们以获得每列的数据。
然后显示第一列中的每个条目,其中包含最后3个条目的移动平均值。 deque
用于实现最后条目的有效迷你队列,以计算移动平均值。
import collections
message = """89 39 59 88 46 1 87 21 2 34
59 40 68 74 29 29 26 30 93 38
84 60 44 98 41 29 8 60 61 83
36 44 56 8 50 94 99 1 30 52
5 27 53 85 67 69 38 67 69 26
92 17 4 13 74 89 30 49 44 20"""
rows = message.splitlines()
data = []
for row in rows:
data.append(row.split())
columns = zip(*data)
total = 0
moving = collections.deque()
# Display the moving average for the first column
for entry in columns[0]:
value = int(entry)
moving.append(value)
total += value
if len(moving) > 3: # Length of moving average
total -= moving.popleft()
print "%3d %.1f" % (value, total/float(len(moving)))
对于此数据,它将显示以下输出:
89 89.0
59 74.0
84 77.3
36 59.7
5 41.7
92 44.3
使用Python 2.7进行测试
答案 1 :(得分:0)
首先,您要使用列列表:
columns = [[] for _ in range(6)]
然后您可以将邮件拆分为单个列表:
for message in range(10):
message = sock.recv(1024)
splits = message.split(None, 5) # split into six pieces at most
然后您可以将其附加到之前创建的列表列表中:
for index, item in enumerate(splits):
columns[index].append(item)
现在,如果您只想打印其中第一个附加数字,请执行
print columns[0][0] # first item of first list