创建“综合点”

时间:2019-09-04 13:51:09

标签: python

我需要在python例程中创建一个我称之为“合成点”的东西。

我有一系列介于-1和1之间的数据,但是,当我将这些数据放在图表上时,它们形成了梯形图。 我想做的是创建相同的x轴值,可以取两个y轴值的点,然后创建带有以下内容的图表: 直线组成“矩形图”

我拥有的格式数据的示例:

0;-1
1;-1
2;-1
3;-1
4;-1
5;-1
6;-1
7;1
8;1
9;1
10;1
11;1
12;1
13;1
14;1
15;1
16;-1
17;-1
18;-1
19;-1
20;-1

例如,在这种情况下,我需要数据采用以下格式:

0;-1
1;-1
2;-1
3;-1
4;-1
5;-1
6;-1
6;1 (point 6 with two values)
7;1
8;1
9;1
10;1
11;1
12;1
13;1
14;1
15;1
15;-1 (point 15 with two values)
16;-1
17;-1
18;-1
19;-1
20;-1

因此,您需要做的是,总是在我进行值更改时,这将创造一个新的观点。这使图形成为矩形,因为y变量的唯一可能值为-1和1。

我需要输入的代码如下。接下来要做的只是将输入数据设置为-1和1格式。

arq = open('vazdif.out', 'rt')
list = []
i = 0
for row in arq:
    field = row.split(';')
    vaz = float(field[2])
    if vaz < 0:
        list.append("-1")
    elif vaz > 0:
        list.append("1")
    n = len(list)  
fou = open('res_id.out','wt')
for i in range(n):
        fou.write('{};{}\n'.format(i,list[i])) 
fou.close

谢谢您的帮助

P.s。英语不是我的母语,请原谅我在书写或代码上的错误。

1 个答案:

答案 0 :(得分:0)

我添加了一个新值prev_value,如果先前的值是相反的符号(乘以当前值<0),则会在列表中添加一个额外的索引。

我认为field[1]field[2]可能是错误的,但我相信到目前为止,您的代码仍然有效。与fou类似,我将替换为with open ...

arq = open('vazdif.out', 'rt')
list = []
i = 0
prev_value = 0

for row in arq:
    field = row.split(';')
    xxx = int(field[1])
    vaz = float(field[2])

    if vaz * prev_value < 0:
        list.append([list[-1][0], - list[-1][1]])

    if vaz < 0:
        list.append([xxx, -1])
    else:
        list.append([xxx, 1])

    prev_val = vaz
fou = open('res_id.out','wt')
for i in list:
        fou.write(f'{i[0]};{i[1]}\n') 
fou.close