python一维数据处理,编写一段代码,能够找出数据中对称的点的索引值,并计算长度。简单说就是计算图片中第1对的在数组中索引值的差,第2对在数组中索引值的差,靠近中心的应该是比较对称,边缘可能不太对称,可以只计算9组或者往上。
train_data = [95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 87975.0, 84150.0, 81600.0, 86955.0, 88740.0, 89760.0, 90270.0, 90270.0, 88230.0, 83130.0, 84405.0, 86955.0, 87975.0, 88485.0, 86955.0, 82110.0, 78540.0, 83130.0, 85425.0, 85935.0, 85170.0, 80325.0, 76755.0, 78030.0, 82875.0, 84150.0, 84150.0, 81600.0, 75735.0, 75480.0, 80325.0, 80070.0, 81600.0, 81600.0, 80070.0, 75225.0, 72165.0, 75735.0, 78540.0, 81345.0, 80070.0, 81090.0, 75480.0, 72675.0, 71655.0, 75480.0, 78030.0, 77775.0, 79560.0, 79560.0, 77265.0, 73950.0, 71910.0, 73440.0, 75225.0, 76500.0, 77010.0, 78285.0, 79050.0, 78795.0, 75225.0, 71655.0, 68850.0, 71145.0, 74715.0, 74460.0, 76245.0, 77010.0, 77010.0, 77265.0, 77775.0, 78285.0, 77775.0, 77775.0, 78285.0, 78795.0, 79560.0, 78795.0, 78795.0, 79560.0, 80835.0, 80325.0, 80325.0, 80325.0, 81600.0, 80070.0, 81345.0, 81855.0, 80835.0, 81600.0, 80325.0, 82110.0, 81855.0, 81345.0, 81855.0, 81855.0, 81345.0, 82110.0, 82875.0, 81855.0, 81855.0, 83385.0, 82620.0, 82365.0, 82365.0, 81855.0, 82875.0, 82875.0, 83640.0, 83385.0, 83130.0, 82620.0, 82875.0, 82620.0, 82365.0, 83130.0, 83640.0, 82620.0, 82620.0, 83640.0, 83130.0, 82875.0, 82365.0, 83895.0, 82365.0, 83130.0, 82620.0, 82620.0, 82110.0, 81855.0, 81855.0, 82620.0, 82875.0, 83385.0, 83640.0, 83640.0, 82875.0, 82620.0, 85935.0, 87465.0, 86190.0, 81855.0, 67065.0, 51765.0, 62730.0, 83640.0, 85680.0, 84405.0, 83640.0, 83130.0, 83130.0, 82620.0, 82365.0, 82110.0, 81855.0, 82875.0, 83640.0, 82875.0, 83385.0, 83895.0, 83640.0, 82875.0, 83130.0, 82620.0, 83385.0, 83385.0, 82365.0, 82365.0, 82110.0, 83130.0, 82620.0, 80580.0, 80835.0, 82365.0, 82365.0, 81345.0, 81855.0, 81855.0, 81600.0, 82365.0, 80580.0, 81600.0, 81345.0, 80070.0, 81090.0, 81090.0, 82110.0, 81345.0, 80580.0, 79815.0, 81090.0, 80580.0, 81345.0, 79305.0, 80580.0, 79815.0, 81090.0, 80070.0, 79560.0, 80070.0, 79560.0, 80070.0, 80325.0, 79560.0, 79560.0, 79560.0, 78795.0, 78285.0, 78540.0, 77520.0, 78030.0, 77775.0, 76245.0, 77265.0, 76755.0, 75225.0, 75735.0, 74970.0, 72420.0, 70890.0, 68595.0, 70635.0, 73695.0, 76500.0, 78030.0, 77010.0, 76755.0, 75225.0, 71910.0, 69360.0, 70380.0, 73695.0, 78795.0, 78285.0, 75225.0, 76245.0, 73185.0, 71400.0, 73440.0, 76755.0, 80580.0, 79560.0, 78030.0, 77265.0, 73695.0, 72930.0, 75990.0, 80070.0, 79815.0, 80325.0, 78540.0, 73185.0, 76245.0, 81090.0, 82620.0, 82365.0, 80835.0, 77775.0, 77775.0, 81090.0, 84150.0, 84150.0, 83640.0, 78795.0, 79815.0, 84405.0, 86445.0, 86445.0, 83640.0, 79560.0, 82620.0, 88485.0, 88740.0, 87210.0, 83130.0, 82875.0, 87210.0, 89250.0, 87720.0, 86190.0, 81345.0, 84405.0, 88230.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0]
test_data = [91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91035.0, 80835.0, 77265.0, 84150.0, 85170.0, 85935.0, 81090.0, 75990.0, 81600.0, 82875.0, 83895.0, 74715.0, 71655.0, 76755.0, 79305.0, 80325.0, 72675.0, 68850.0, 74460.0, 75990.0, 77265.0, 70125.0, 67320.0, 71655.0, 74205.0, 75990.0, 69870.0, 65535.0, 69360.0, 72165.0, 72930.0, 71145.0, 65025.0, 62730.0, 68595.0, 70890.0, 72420.0, 67065.0, 64005.0, 61710.0, 66300.0, 70125.0, 71145.0, 69870.0, 64005.0, 61965.0, 65535.0, 67830.0, 68850.0, 69360.0, 67320.0, 63240.0, 59670.0, 63495.0, 65790.0, 67320.0, 69105.0, 69105.0, 65535.0, 62985.0, 60435.0, 63240.0, 65025.0, 65535.0, 67575.0, 68085.0, 69105.0, 68595.0, 64260.0, 62730.0, 61200.0, 63750.0, 65535.0, 66555.0, 67575.0, 68595.0, 69105.0, 69870.0, 69360.0, 70380.0, 71400.0, 70890.0, 70890.0, 70125.0, 71145.0, 70890.0, 69870.0, 71655.0, 72930.0, 72675.0, 72165.0, 72165.0, 72420.0, 72675.0, 72420.0, 73695.0, 73440.0, 74205.0, 74715.0, 71910.0, 73440.0, 73950.0, 73950.0, 73185.0, 73695.0, 73440.0, 74715.0, 74460.0, 72930.0, 69105.0, 69105.0, 67320.0, 67320.0, 66555.0, 64770.0, 68085.0, 67830.0, 70890.0, 71145.0, 70890.0, 70635.0, 70890.0, 72165.0, 71400.0, 72420.0, 72675.0, 71655.0, 71655.0, 70125.0, 72165.0, 71400.0, 71655.0, 72165.0, 71910.0, 72420.0, 71145.0, 70380.0, 70890.0, 71910.0, 69870.0, 68085.0, 69105.0, 65790.0, 69105.0, 69105.0, 68595.0, 68595.0, 67830.0, 67575.0, 66045.0, 65025.0, 65790.0, 64515.0, 62475.0, 59925.0, 58140.0, 62220.0, 66555.0, 67575.0, 67065.0, 66045.0, 65790.0, 65025.0, 61200.0, 59670.0, 60945.0, 63750.0, 67320.0, 67320.0, 66555.0, 65535.0, 63240.0, 60180.0, 61965.0, 64260.0, 68340.0, 68085.0, 66810.0, 63240.0, 60945.0, 62985.0, 68595.0, 69615.0, 68085.0, 66045.0, 62475.0, 63240.0, 68340.0, 71655.0, 71655.0, 67320.0, 64770.0, 65535.0, 71145.0, 75480.0, 72420.0, 69870.0, 66300.0, 70125.0, 76245.0, 75480.0, 71910.0, 67830.0, 71400.0, 79305.0, 76755.0, 73185.0, 69105.0, 75480.0, 79560.0, 76500.0, 73695.0, 70890.0, 78795.0, 79815.0, 78030.0, 73185.0, 75990.0, 82365.0, 81855.0, 78030.0, 78540.0, 84660.0, 84660.0, 82110.0, 81090.0, 85170.0, 83640.0, 80835.0, 77265.0, 80835.0, 87210.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0, 91800.0]
如果想要找出数据中对称的点的索引值,可以使用以下代码:
symmetry_indices = []
for i in range(len(train_data)):
if train_data[i] == train_data[-i-1]: # 判断是否对称
symmetry_indices.append(i)
上面的代码会找出所有的对称点的索引值,存储在列表symmetry_indices中。
如果只想计算长度,可以使用以下代码:
lengths = []
for i in range(len(symmetry_indices)//2):
lengths.append(symmetry_indices[2*i+1] - symmetry_indices[2*i])
上面的代码会计算所有的对称点对的长度,存储在列表lengths中。
如果只想计算前9对的长度,可以修改代码如下:
lengths = []
for i in range(9):
lengths.append(symmetry_indices[2*i+1] - symmetry_indices[2*i])
希望以上代码能够帮助到你。
思路可能不对, 仅供参考:
代码:
train_data = [95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 87975.0, 84150.0, 81600.0, 86955.0, 88740.0, 89760.0, 90270.0, 90270.0, 88230.0, 83130.0, 84405.0, 86955.0, 87975.0, 88485.0, 86955.0, 82110.0, 78540.0, 83130.0, 85425.0, 85935.0, 85170.0, 80325.0, 76755.0, 78030.0, 82875.0, 84150.0, 84150.0, 81600.0, 75735.0, 75480.0, 80325.0, 80070.0, 81600.0, 81600.0, 80070.0, 75225.0, 72165.0, 75735.0, 78540.0, 81345.0, 80070.0, 81090.0, 75480.0, 72675.0, 71655.0, 75480.0, 78030.0, 77775.0, 79560.0, 79560.0, 77265.0, 73950.0, 71910.0, 73440.0, 75225.0, 76500.0, 77010.0, 78285.0, 79050.0, 78795.0, 75225.0, 71655.0, 68850.0, 71145.0, 74715.0, 74460.0, 76245.0, 77010.0, 77010.0, 77265.0, 77775.0, 78285.0, 77775.0, 77775.0, 78285.0, 78795.0, 79560.0, 78795.0, 78795.0, 79560.0, 80835.0, 80325.0, 80325.0, 80325.0, 81600.0, 80070.0, 81345.0, 81855.0, 80835.0, 81600.0, 80325.0, 82110.0, 81855.0, 81345.0, 81855.0, 81855.0, 81345.0, 82110.0, 82875.0, 81855.0, 81855.0, 83385.0, 82620.0, 82365.0, 82365.0, 81855.0, 82875.0, 82875.0, 83640.0, 83385.0, 83130.0, 82620.0, 82875.0, 82620.0, 82365.0, 83130.0, 83640.0, 82620.0, 82620.0, 83640.0, 83130.0, 82875.0, 82365.0, 83895.0, 82365.0, 83130.0, 82620.0, 82620.0, 82110.0, 81855.0, 81855.0, 82620.0, 82875.0, 83385.0, 83640.0, 83640.0, 82875.0, 82620.0, 85935.0, 87465.0, 86190.0, 81855.0, 67065.0, 51765.0, 62730.0, 83640.0, 85680.0, 84405.0, 83640.0, 83130.0, 83130.0, 82620.0, 82365.0, 82110.0, 81855.0, 82875.0, 83640.0, 82875.0, 83385.0, 83895.0, 83640.0, 82875.0, 83130.0, 82620.0, 83385.0, 83385.0, 82365.0, 82365.0, 82110.0, 83130.0, 82620.0, 80580.0, 80835.0, 82365.0, 82365.0, 81345.0, 81855.0, 81855.0, 81600.0, 82365.0, 80580.0, 81600.0, 81345.0, 80070.0, 81090.0, 81090.0, 82110.0, 81345.0, 80580.0, 79815.0, 81090.0, 80580.0, 81345.0, 79305.0, 80580.0, 79815.0, 81090.0, 80070.0, 79560.0, 80070.0, 79560.0, 80070.0, 80325.0, 79560.0, 79560.0, 79560.0, 78795.0, 78285.0, 78540.0, 77520.0, 78030.0, 77775.0, 76245.0, 77265.0, 76755.0, 75225.0, 75735.0, 74970.0, 72420.0, 70890.0, 68595.0, 70635.0, 73695.0, 76500.0, 78030.0, 77010.0, 76755.0, 75225.0, 71910.0, 69360.0, 70380.0, 73695.0, 78795.0, 78285.0, 75225.0, 76245.0, 73185.0, 71400.0, 73440.0, 76755.0, 80580.0, 79560.0, 78030.0, 77265.0, 73695.0, 72930.0, 75990.0, 80070.0, 79815.0, 80325.0, 78540.0, 73185.0, 76245.0, 81090.0, 82620.0, 82365.0, 80835.0, 77775.0, 77775.0, 81090.0, 84150.0, 84150.0, 83640.0, 78795.0, 79815.0, 84405.0, 86445.0, 86445.0, 83640.0, 79560.0, 82620.0, 88485.0, 88740.0, 87210.0, 83130.0, 82875.0, 87210.0, 89250.0, 87720.0, 86190.0, 81345.0, 84405.0, 88230.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0, 95625.0]
# 思路: 假定某个点是中心点, 找对称点的总数量大于某个值(这个值可以预估, 比如100)
for i in range(len(train_data)):
# i 是中心点索引
# print(i)
count = 0
indexList = []
dataList = []
for j in range(i):
if 2*i-j < len(train_data) and train_data[j] == train_data[2*i-j]:
count += 1
indexList.append((j, 2*i-j, 2*i-j - j)) # 对称点索引及差值
dataList.append((j, train_data[j])) # 存储对称点, 用于验证数据
dataList.append((2*i-j, train_data[2*i-j]))
if count >= 100:
print(i)
print(indexList)
dataList.sort(key=lambda x: x[0]) # 排序
print(dataList)
break # 停止查询
输出:
231
[(0, 462, 462), (1, 461, 460), (2, 460, 458), (3, 459, 456), (4, 458, 454), (5, 457, 452), (6, 456, 450), (7, 455, 448), (8, 454, 446), (9, 453, 444), (10, 452, 442), (11, 451, 440), (12, 450, 438), (13, 449, 436), (14, 448, 434), (15, 447, 432), (16, 446, 430), (17, 445, 428), (18, 444, 426), (19, 443, 424), (20, 442, 422), (21, 441, 420), (22, 440, 418), (23, 439, 416), (24, 438, 414), (25, 437, 412), (26, 436, 410), (27, 435, 408), (28, 434, 406), (29, 433, 404), (30, 432, 402), (31, 431, 400), (32, 430, 398), (33, 429, 396), (34, 428, 394), (35, 427, 392), (36, 426, 390), (37, 425, 388), (38, 424, 386), (39, 423, 384), (40, 422, 382), (41, 421, 380), (42, 420, 378), (43, 419, 376), (44, 418, 374), (45, 417, 372), (46, 416, 370), (47, 415, 368), (48, 414, 366), (49, 413, 364), (50, 412, 362), (51, 411, 360), (52, 410, 358), (53, 409, 356), (54, 408, 354), (55, 407, 352), (56, 406, 350), (57, 405, 348), (58, 404, 346), (59, 403, 344), (60, 402, 342), (61, 401, 340), (62, 400, 338), (63, 399, 336), (64, 398, 334), (65, 397, 332), (66, 396, 330), (67, 395, 328), (68, 394, 326), (69, 393, 324), (70, 392, 322), (71, 391, 320), (72, 390, 318), (73, 389, 316), (74, 388, 314), (75, 387, 312), (76, 386, 310), (77, 385, 308), (78, 384, 306), (79, 383, 304), (80, 382, 302), (81, 381, 300), (82, 380, 298), (83, 379, 296), (84, 378, 294), (85, 377, 292), (86, 376, 290), (87, 375, 288), (88, 374, 286), (89, 373, 284), (159, 303, 144), (169, 293, 124), (175, 287, 112), (193, 269, 76), (195, 267, 72), (210, 252, 42), (211, 251, 40), (213, 249, 36), (221, 241, 20), (224, 238, 14)]
None
Process finished with exit code 0
对称点画图:
以下是如何在数据中找到对称点对的索引和长度的示例:
def find_symmetry(data):
indices = []
lengths = []
# Iterate through the data in pairs
for i in range(len(data) // 2):
# Check if the current pair is symmetrical
if data[i] == data[-i-1]:
indices.append(i)
lengths.append(2)
return indices, lengths
indices, lengths = find_symmetry(train_data)
print(f'Indices of symmetrical points: {indices}')
print(f'Lengths of symmetrical pairs: {lengths}')
该代码将在数据中找到对称点对,并将每对中第一个点的索引存储在索引列表中,将每对的长度存储在长度列表中。输出将类似于:
Indices of symmetrical points: [0, 1, 2, 3, 4, 5, 6, 7, 8]
Lengths of symmetrical pairs: [2, 2, 2, 2, 2, 2, 2, 2, 2]
仅供参考,望采纳,谢谢。
你好,这是一段代码实现上述功能的例子。这里假设数据保存在一个名为 data 的列表中:
symmetry_pairs = []
for i in range(len(data)):
for j in range(i+1, len(data)):
if data[i] == data[j]:
symmetry_pairs.append((i, j))
lengths = [j - i for i, j in symmetry_pairs]
这段代码会找出 data 中所有对称点的索引值对,并计算出每对点之间的长度。例如,如果 data 为 [1, 2, 3, 2, 1],那么 symmetry_pairs 会变成 [(0, 4), (1, 3)],lengths 会变成 [4, 2]。
下面是一个实现,该实现的算法时间复杂度为 O(n):
from scipy import signal
def find_symmetry(data):
# 应用中值滤波
filtered_data = signal.medfilt(data)
# 初始化结果数组
result = []
# 遍历数据的前半部分
for i in range(len(filtered_data) // 2):
# 如果数据的第 i 个位置的值和数据的倒数第 i 个位置的值相等
if filtered_data[i] == filtered_data[-i - 1]:
# 将索引差添加到结果数组中
result.append(i - len(filtered_data) // 2)
return result
# 测试示例
print(find_symmetry(train_data))
在这个实现中,我们使用了 scipy 库的 medfilt 函数来对数据进行中值滤波。然后我们遍历过滤后的数据的前半部分,并计算出每一对对称的数据在数组中的索引差,最后将它们添加到结果数组中。
注意:如果要使用上面的代码,需要先安装 scipy 库,可以使用以下命令进行安装:
pip install scipy
另外,如果中心点不在最中央,可以考虑找到数据的中位数,并将数据平移到中位数处,然后再使用上面的代码进行计算。可以使用以下代码来实现:
import numpy as np
def find_symmetry(data):
#计算数据的中位数
median = np.median(data)
#将数据平移到中位数处
shifted_data = data - median
#应用中值滤波
filtered_data = signal.medfilt(shifted_data)
#初始化结果数组
result = []
#遍历数据的前半部分
for i in range(len(filtered_data) // 2):
# 如果数据的第 i 个位置的值和数据的倒数第 i 个位置的值相等
if filtered_data[i] == filtered_data[-i - 1]:
# 将索引差添加到结果数组中
result.append(i - len(filtered_data) // 2)
return result
#测试示例
print(find_symmetry(train_data))
在这个实现中,我们使用了 numpy 库的 median
函数来计算数据的中位数,然后使用平移操作将数据平移到中位数处。接下来使用 scipy 库的 medfilt
函数对数据进行中值滤波,最后计算出每一对对称的数据在数组中的索引差,并将它们添加到结果数组中。
注意:如果要使用上面的代码,需要先安装 numpy 和 scipy 库,可以使用以下命令进行安装:
pip install numpy scipy
希望对您有所帮助。望采纳。
以下是一种可行的方法:
1、将数据从中心开始分成9组,例如第1组是train_data[0]到train_data[8],第2组是train_data[1]到train_data[9],以此类推。
2、对于每一组,计算其中点的索引值。例如,第1组的中点索引值是(0+8)/2=4。
3、对于每一组,计算索引值最大的点和索引值最小的点的索引值差。例如,第1组的索引值最大的点是train_data[8],索引值最小的点是train_data[0],差值是8-0=8。
4、将每一组的差值相加,得到总的差值。
代码示例如下:
n = len(train_data)
group_size = n // 9
# 初始化总的差值
total_diff = 0
for i in range(9):
# 计算中点索引值
mid_index = (i + 0.5) * group_size
# 计算索引值最大的点和索引值最小的点的索引值差
diff = int(mid_index + group_size - 1) - int(mid_index)
# 累加差值
total_diff += diff
# 输出总的差值
print(total_diff)
希望这能帮到您。