您当前的位置: 首页 >  分类

星夜孤帆

暂无认证

  • 2浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

按单张图片进行分类

星夜孤帆 发布时间:2018-10-20 00:23:55 ,浏览量:2

import numpy as np
import operator
import os
import copy
from matplotlib.font_manager import FontProperties
from scipy.interpolate import lagrange
import random
import matplotlib.pyplot as plt
import math 
np.set_printoptions(suppress=True)
# 把opt文件内的逗号变为空格
#数据在我的百度云数据库txt文件,及opt文件
np.set_printoptions(threshold=np.inf) #输出全部矩阵不带省略号
random.seed(100)
##########################################
data = np.loadtxt('../txt/Vit_3Day.txt')
print(len(data))
# data = data[0:2735]#抽取一部分 # 300十类,2735 100类
x1 = data[:,5]#x起点坐标
x2 = data[:,9]#x终点坐标
y1 = data[:,6]#y起
y2 = data[:,10]#y起
z1 = data[:,4]#IDpart
z2 = data[:,8]#IDpart
diam = data[:,12]
s1 = [a1 for a1 in range(1,len(x1)-1) if z1[a1]==z2[a1-1]!=-1 or z1[a1]!= z2[a1-1]]#id相同不等于0,或id不同
# print(s1)
lx = []#x1,x2相同的部分组成的列表
lxqi = []
lxzg = []
for i1 in range(len(s1)-1):
    b1 = x1[s1[i1]:s1[i1+1]]
    b1 = b1.tolist()
    b2 = x2[s1[i1+1]-1]#s1[i1]相当于a1
#     b1 = b1 + [b2]#把与x2最后相连的一个数和x1拼接起来
    b5 = z1[s1[i1]]#x,y起点id
    b1qi_id = [b5]+b1 +[b2]
    b6 = z2[s1[i1+1]-1]#x,y终点id
    b1zg_id = [b6] + b1+[b2]
    lx.append(b1)
    lxqi.append(b1qi_id)
    lxzg.append(b1zg_id)
###################################################
ly = []#y坐标以及管径大小
for i3 in range(len(s1)-1):
    b3 = y1[s1[i3]:s1[i3+1]]
    b3 = b3.tolist()
    b4 = y2[s1[i3+1]-1]#y最后一个不相等的数
    b3 = b3 + [b4]
    dm = diam[s1[i3+1]-1]
    b3 = b3 + [dm]#加上管径
    ly.append(b3)
#####################################################
#带有起点id的x坐标与y坐标合并
for q1 in range(len(lxqi)):
    for q2 in range(len(ly[q1])):
        lxqi[q1].append(ly[q1][q2])
#带有终点id的x坐标与y坐标合并
for p1 in range(len(lxzg)):
    for p2 in range(len(ly[p1])):
        lxzg[p1].append(ly[p1][p2])
lxqi.sort(key=operator.itemgetter(0))#排序,只按照第一个索引大小排序
tou = lxqi
lxzg.sort(key=operator.itemgetter(0))  
wei = lxzg 
# #########################################
toudeng = []
weideng = []
for dwei in wei:
    for i in range(len(tou)-1):
        if dwei[0] ==tou[i][0] and dwei[0]==tou[i+1][0]:
            toud = [dwei,tou[i],tou[i+1]]
            toudeng.append(toud)
for dtou in tou:
    for i in range(len(wei)-1):
        if dtou[0] == wei[i][0] and dtou[0]==wei[i+1][0]:
            weid = [wei[i],wei[i+1],dtou]
            weideng.append(weid)
# ###################################################
datatoudeng = []
dataweideng = []
#去掉起点id
for i in range(len(toudeng)):
    a = toudeng[i][0][1::]
    b = toudeng[i][1][1::]
    c = toudeng[i][2][1::]
    d = [a]+[b]+[c]
    datatoudeng.append(d)
for i in range(len(weideng)):
    a1 = weideng[i][0][1::]
    b1 = weideng[i][1][1::]
    c1 = weideng[i][2][1::]
    d1 = [a1]+[b1]+[c1]
    dataweideng.append(d1)
####################################################################
#判断管径信息是否加进列表,若未加进则只为x,y坐标,为偶数
for i in range(len(dataweideng)):
    a = dataweideng[i]
    assert len(a[0])%2==1
    assert len(a[1])%2==1
    assert len(a[2])%2==1
for i in range(len(datatoudeng)):
    a = datatoudeng[i]
    assert len(a[0])%2==1
    assert len(a[1])%2==1
    assert len(a[2])%2==1
final_tou = datatoudeng
##############################################################################
#将尾等分叉排列方式改为,与头等分叉相同的排列方式
final_wei = []
for i in range(len(dataweideng)):
    zhu = dataweideng[i][0]
    zuo = dataweideng[i][1]
    you = dataweideng[i][2]
    zhu_diam = [zhu[-1]]
    zuo_diam = [zuo[-1]]
    you_diam = [you[-1]]
    zhu_diam1 = [zhu[-1]]
    zuo_diam1 = [zuo[-1]]
    you_diam1 = [you[-1]]
    zhu_x = zhu[0:len(zhu)//2]
    zuo_x = zuo[0:len(zuo)//2]
    you_x = you[0:len(you)//2]
    zhu_y = zhu[len(zhu)//2:(len(zhu)-1)]
    zuo_y = zuo[len(zuo)//2:(len(zuo)-1)]
    you_y = you[len(you)//2:(len(you)-1)]
    #反转它们的顺序
    zhu_x1 = zhu_x[::-1]
    zuo_x1 = zuo_x[::-1]
    you_x1 = you_x[::-1]
    zhu_y1 = zhu_y[::-1]
    zuo_y1 = zuo_y[::-1]
    you_y1 = you_y[::-1]
    zhu_x = you_x1
    zuo_x = zhu_x1
    you_x = zuo_x1
    zhu_y = you_y1
    zuo_y = zhu_y1
    you_y = zuo_y1
    zhu_diam = you_diam1
    zuo_diam = zhu_diam1
    you_diam = zuo_diam1
    zhu_xy = zhu_x + zhu_y
    zuo_xy = zuo_x + zuo_y
    you_xy = you_x + you_y
    #这里再将坐标点与管径接起来
    zhu = zhu_xy + zhu_diam
    zuo = zuo_xy + zuo_diam
    you = you_xy + you_diam
    fencha = [zhu] + [zuo] + [you]
    final_wei.append(fencha)
# 这里是将分叉和汇聚都加在了一起
# final = final_tou + final_wei
# 若想把分叉和汇聚分开,则单独提取即可
final = final_tou
############################################################################
# 将所有的分叉主分支反转
final_zhu_reversed = []
for i in range(len(final)):
    zhu = final[i][0]
    zuo = final[i][1]
    you = final[i][2]
    zhu_diam = [zhu[-1]]
    zuo_diam = [zuo[-1]]
    you_diam = [you[-1]]
    zhu_x = zhu[0:len(zhu)//2]
    zuo_x = zuo[0:len(zuo)//2]
    you_x = you[0:len(you)//2]
    zhu_y = zhu[len(zhu)//2:(len(zhu)-1)]
    zuo_y = zuo[len(zuo)//2:(len(zuo)-1)]
    you_y = you[len(you)//2:(len(you)-1)]
    #反转它们的顺序
    zhu_x1 = zhu_x[::-1]
    zhu_y1 = zhu_y[::-1]
    zhu_x = zhu_x1
    zhu_y = zhu_y1
    zhu_xy = zhu_x + zhu_y
    zuo_xy = zuo_x + zuo_y
    you_xy = you_x + you_y
    #这里再将坐标点与管径接起来
    zhu = zhu_xy + zhu_diam
    zuo = zuo_xy + zuo_diam
    you = you_xy + you_diam
    fencha = [zhu] + [zuo] + [you]
    final_zhu_reversed.append(fencha)
final = final_zhu_reversed
############################################################################
# 可视化数据
# data = final
# for i in range(len(data)):
#         zhu = data[i][0]
#         zuo = data[i][1]
#         you = data[i][2]
#         print(zhu)
#         print(zuo)
#         print(you)
#         zhu_diam = [zhu[-1]]
#         zuo_diam = [zuo[-1]]
#         you_diam = [you[-1]]
#         zhu_x = zhu[0:len(zhu)//2]
#         zuo_x = zuo[0:len(zuo)//2]
#         you_x = you[0:len(you)//2]
#         zhu_y = zhu[len(zhu)//2:(len(zhu)-1)]
#         zuo_y = zuo[len(zuo)//2:(len(zuo)-1)]
#         you_y = you[len(you)//2:(len(you)-1)]
# #         print(zhu_x)
# #         print(zuo_x)
# #         print(you_x)
#         print("下一个")
##############################################################################
#去除重复的点(包括头部相等和尾部相等)
final1 = []
for i in range(len(final)):
    zhu = final[i][0]
    zuo = final[i][1]
    you = final[i][2]
    zhu_diam = [zhu[-1]]
    zuo_diam = [zuo[-1]]
    you_diam = [you[-1]]
    zhu_x = zhu[0:len(zhu)//2]
    zuo_x = zuo[0:len(zuo)//2]
    you_x = you[0:len(you)//2]
    zhu_y = zhu[len(zhu)//2:(len(zhu)-1)]
    zuo_y = zuo[len(zuo)//2:(len(zuo)-1)]
    you_y = you[len(you)//2:(len(you)-1)]
    ###########################################
    #前后不相等加进数组,最后再接上原始数组的最后一个
    zhu_x1 = []
    zhu_y1 = []
    for j in range(len(zhu_x)-1):
        if zhu_x[j] != zhu_x[j+1] or zhu_y[j] != zhu_y[j+1]:
            zhu_x1.append(zhu_x[j])
            zhu_y1.append(zhu_y[j])
    zhu_x1.append(zhu_x[-1])
    zhu_y1.append(zhu_y[-1])
     
    zuo_x1 = []
    zuo_y1 = []
    for j in range(len(zuo_x)-1):
        if zuo_x[j] != zuo_x[j+1] or zuo_y[j] != zuo_y[j+1]:
            zuo_x1.append(zuo_x[j])
            zuo_y1.append(zuo_y[j])
    zuo_x1.append(zuo_x[-1])
    zuo_y1.append(zuo_y[-1])
     
    you_x1 = []
    you_y1 = []
    for j in range(len(you_x)-1):
        if you_x[j] != you_x[j+1] or you_y[j] != you_y[j+1]:
            you_x1.append(you_x[j])
            you_y1.append(you_y[j])
    you_x1.append(you_x[-1])
    you_y1.append(you_y[-1])
    ###########################################
    zhu_xy = zhu_x1 + zhu_y1
    zuo_xy = zuo_x1 + zuo_y1
    you_xy = you_x1 + you_y1
    #这里再将坐标点与管径接起来
    zhu = zhu_xy + zhu_diam
    zuo = zuo_xy + zuo_diam
    you = you_xy + you_diam
    fencha = [zhu] + [zuo] + [you]
    final1.append(fencha)
final = final1
############################################################################
#可视化数据,观察哪些数据
# for i in range(len(final)):
#     print("第%d个分叉" %i)
#     for j in range(len(final[i])):
#         print(final[i][j])
#         print("**********************")
##############################################################################
#观察每一个分支有多少个坐标点,算上管径最多59,最少为7
axis_num_list = []
extract = []
for i in range(len(final)):
    for j in range(len(final[i])):
        axis_num = len(final[i][j])
        axis_num_list.append(axis_num)
for file in axis_num_list:
    if file < 33 :
        extract.append(file)
print(len(axis_num_list))
print(len(extract))
print(max(axis_num_list))
##################################################################################
# # 挑选出每个分支小于20个数的分叉
# select_final = []
# for i in range(len(final)):
#   point_num = 11
#   if len(final[])
#   print("下一个")
######################################################################################
# 挑选出每个分支小于33个数的分叉,x,y坐标个数分别为16,管径为1,这些点一个2830个,小于等于33的有2738个
select_final = []
for i in range(len(final)):
    point_num = 33
    if len(final[i][0])             
关注
打赏
1636984416
查看更多评论
0.0405s