如何分别显示数组的每个元素

时间:2015-07-27 10:25:21

标签: python arrays numpy split

我有一个套接字,可以从另一台计算机中获取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的第一个数字。

2 个答案:

答案 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