我有一个字典,其中3D元组坐标为键,字符串分数为值。现在我想获得一个新的列表/字典/坐标数组,它应该是12x12x12框中坐标和所有周围坐标的百分比值。有没有比在第一种方法中从字典中获取坐标更快的方法? (sparse1是具有原始坐标的字典)。在代码中,sparse1只是从一个Tube中提取坐标(因为我不知道如何在这里添加更多字符:():
import numpy as np
import itertools
sparse1 = {(32.0, 291.0, 3.0): ['-2'], (16.0, 299.0, 23.0): ['-2'], (22.0, 303.0, 24.0): ['2'], (30.0, 296.0, 16.0): ['1'], (27.0, 305.0, 10.0): ['1'], (21.0, 290.0, 16.0): ['2'], (27.0, 295.0, 15.0): ['-2'], (36.0, 293.0, -2.0): ['2'], (37.0, 292.0, 5.0): ['2'], (24.0, 312.0, 18.0): ['2'], (21.0, 307.0, 25.0): ['-2'], (20.0, 304.0, 17.0): ['1'], (26.0, 291.0, 18.0): ['-2'], (17.0, 308.0, 10.0): ['2'], (32.0, 313.0, 11.0): ['2'], (32.0, 303.0, 6.0): ['-2'], (25.0, 294.0, 10.0): ['2'], (22.0, 299.0, 19.0): ['2'], (24.0, 293.0, 2.0): ['-2'], (20.0, 303.0, 20.0): ['2'], (20.0, 293.0, 3.0): ['2'], (19.0, 298.0, 28.0): ['-2'], (29.0, 297.0, -1.0): ['2'], (31.0, 310.0, 11.0): ['-2'], (22.0, 300.0, 26.0): ['2'], (21.0, 311.0, 14.0): ['2'], (35.0, 306.0, 13.0): ['2'], (15.0, 308.0, 14.0): ['2'], (27.0, 296.0, 21.0): ['2'], (28.0, 289.0, 0.0): ['2'], (18.0, 309.0, 9.0): ['2'], (31.0, 297.0, 1.0): ['2'], (23.0, 312.0, 15.0): ['2'], (26.0, 295.0, 13.0): ['-2'], (30.0, 302.0, 9.0): ['1'], (16.0, 301.0, 26.0): ['-2'], (29.0, 307.0, 17.0): ['2'], (24.0, 299.0, 18.0): ['2'], (32.0, 290.0, -3.0): ['2'], (12.0, 301.0, 27.0): ['2'], (33.0, 311.0, 11.0): ['1'], (20.0, 291.0, 19.0): ['2'], (26.0, 310.0, 12.0): ['2'], (21.0, 305.0, 6.0): ['1'], (36.0, 289.0, 12.0): ['2'], (23.0, 290.0, 1.0): ['2'], (20.0, 306.0, 30.0): ['2'], (30.0, 308.0, 2.0): ['1'], (15.0, 296.0, 25.0): ['-2'], (28.0, 293.0, 11.0): ['-2'], (31.0, 301.0, 6.0): ['2'], (17.0, 298.0, 29.0): ['1'], (32.0, 289.0, 1.0): ['-2'], (25.0, 292.0, 17.0): ['-2'], (23.0, 307.0, 24.0): ['-2'], (21.0, 292.0, 22.0): ['1'], (27.0, 293.0, 9.0): ['2'], (26.0, 304.0, 0.0): ['2'], (20.0, 295.0, 14.0): ['2'], (25.0, 309.0, 24.0): ['2'], (24.0, 310.0, 16.0): ['-2'], (21.0, 309.0, 27.0): ['1'], (14.0, 306.0, 23.0): ['-2'], (23.0, 294.0, 12.0): ['2'], (20.0, 310.0, 19.0): ['-2'], (30.0, 309.0, 12.0): ['-2'], (33.0, 302.0, 12.0): ['2'], (26.0, 293.0, 20.0): ['1'], (30.0, 294.0, 19.0): ['2'], (25.0, 288.0, 12.0): ['2'], (29.0, 305.0, 14.0): ['2'], (24.0, 291.0, 4.0): ['2'], (33.0, 309.0, 4.0): ['2'], (28.0, 294.0, -1.0): ['-2'], (20.0, 301.0, 22.0): ['2'], (32.0, 310.0, 12.0): ['-2'], (19.0, 296.0, 30.0): ['2'], (25.0, 305.0, 21.0): ['2'], (22.0, 292.0, 4.0): ['2'], (30.0, 307.0, 1.0): ['1'], (34.0, 303.0, 7.0): ['1'], (28.0, 295.0, 6.0): ['2'], (18.0, 311.0, 11.0): ['2'], (31.0, 303.0, 3.0): ['1'], (30.0, 296.0, 11.0): ['1'], (16.0, 299.0, 28.0): ['-2'], (35.0, 289.0, 10.0): ['-2'], (13.0, 304.0, 29.0): ['2'], (29.0, 309.0, 19.0): ['2'], (25.0, 291.0, -1.0): ['2'], (24.0, 297.0, 16.0): ['1'], (27.0, 295.0, 6.0): ['2'], (33.0, 305.0, 9.0): ['-2'], (26.0, 296.0, 14.0): ['1'], (29.0, 295.0, 2.0): ['-2'], (22.0, 298.0, 26.0): ['1'], (18.0, 293.0, 19.0): ['2'], (29.0, 296.0, 13.0): ['1'], (18.0, 305.0, 27.0): ['-2'], (19.0, 309.0, 16.0): ['-2'], (31.0, 291.0, 4.0): ['-2'], (25.0, 294.0, 19.0): ['-2'], (22.0, 299.0, 28.0): ['2'], (24.0, 293.0, 11.0): ['2'], (21.0, 294.0, 20.0): ['-2'], (27.0, 291.0, 11.0): ['-2'], (26.0, 306.0, 6.0): ['-2'], (19.0, 298.0, 21.0): ['-2'], (29.0, 294.0, 0.0): ['-2'], (24.0, 308.0, 22.0): ['-2'], (30.0, 305.0, 8.0): ['-2'], (14.0, 300.0, 21.0): ['2'], (37.0, 293.0, -1.0): ['2'], (23.0, 292.0, 14.0): ['1'], (29.0, 290.0, 17.0): ['2'], (20.0, 308.0, 13.0): ['-2'], (33.0, 296.0, 10.0): ['2'], (26.0, 295.0, 22.0): ['2'], (30.0, 306.0, 7.0): ['-2'], (17.0, 304.0, 14.0): ['2'], (30.0, 302.0, 0.0): ['2'], (25.0, 290.0, 14.0): ['-2'], (29.0, 307.0, 8.0): ['-2'], (31.0, 308.0, 3.0): ['1'], (28.0, 293.0, 8.0): ['2'], (37.0, 287.0, 5.0): ['2'], (20.0, 291.0, 24.0): ['2'], (35.0, 294.0, 7.0): ['2'], (32.0, 308.0, 10.0): ['-2'], (29.0, 293.0, 2.0): ['-2'], (19.0, 294.0, 16.0): ['2'], (25.0, 307.0, 11.0): ['-2'], (22.0, 294.0, 2.0): ['-2'], (21.0, 305.0, 9.0): ['-2'], (27.0, 310.0, 20.0): ['2'], (18.0, 303.0, 14.0): ['2'], (28.0, 293.0, 4.0): ['-2'], (29.0, 296.0, -2.0): ['2'], (23.0, 307.0, 19.0): ['-2'], (28.0, 294.0, 10.0): ['1'], (27.0, 293.0, 0.0): ['-2'], (33.0, 307.0, 7.0): ['-2'], (26.0, 304.0, 11.0): ['1'], (20.0, 295.0, 23.0): ['-2'], (25.0, 309.0, 3.0): ['2'], (36.0, 293.0, 8.0): ['2'], (23.0, 294.0, 5.0): ['1'], (29.0, 298.0, 15.0): ['2'], (28.0, 291.0, 16.0): ['-2'], (15.0, 300.0, 29.0): ['1'], (19.0, 307.0, 18.0): ['-2'], (31.0, 289.0, 2.0): ['-2'], (29.0, 297.0, -2.0): ['2'], (35.0, 293.0, 4.0): ['1'], (29.0, 305.0, 1.0): ['1'], (25.0, 293.0, -3.0): ['2'], (24.0, 291.0, 13.0): ['1'], (28.0, 306.0, 9.0): ['-2'], (26.0, 308.0, 4.0): ['1'], (17.0, 295.0, 24.0): ['-2'], (32.0, 310.0, 7.0): ['2'], (19.0, 296.0, 23.0): ['-2'], (16.0, 298.0, 20.0): ['2'], (24.0, 306.0, 20.0): ['-2'], (30.0, 307.0, 10.0): ['-2'], (23.0, 298.0, 0.0): ['1'], (29.0, 302.0, 2.0): ['1'], (30.0, 305.0, 3.0): ['-2'], (31.0, 293.0, 7.0): ['1'], (17.0, 306.0, 12.0): ['2'], (30.0, 296.0, 2.0): ['-2'], (32.0, 297.0, 0.0): ['2'], (24.0, 298.0, -1.0): ['1'], (35.0, 289.0, 1.0): ['-2'], (29.0, 309.0, 10.0): ['-2'], (12.0, 307.0, 26.0): ['2'], (28.0, 310.0, 18.0): ['1'], (26.0, 294.0, -3.0): ['2'], (33.0, 295.0, -2.0): ['2'], (26.0, 296.0, 1.0): ['-2'], (32.0, 306.0, 8.0): ['-2'], (19.0, 292.0, 18.0): ['2'], (25.0, 301.0, 9.0): ['2'], (22.0, 298.0, 17.0): ['1'], (21.0, 307.0, 15.0): ['-2'], (21.0, 295.0, 25.0): ['-2'], (29.0, 296.0, 18.0): ['2'], (15.0, 302.0, 20.0): ['2'], (21.0, 310.0, 20.0): ['-2'], (31.0, 291.0, 15.0): ['-2'], (17.0, 308.0, 24.0): ['-2'], (30.0, 292.0, 7.0): ['1'], (24.0, 297.0, 26.0): ['2'], (23.0, 305.0, 21.0): ['-2'], (13.0, 308.0, 25.0): ['1'], (27.0, 291.0, 2.0): ['-2'], (27.0, 297.0, 15.0): ['2'], (26.0, 306.0, 13.0): ['2'], (20.0, 293.0, 21.0): ['-2'], (26.0, 294.0, 23.0): ['2'], (16.0, 294.0, 25.0): ['1'], (35.0, 286.0, 5.0): ['1'], (38.0, 292.0, 3.0): ['2'], (19.0, 305.0, 12.0): ['-2'], (31.0, 295.0, 0.0): ['-2'], (21.0, 312.0, 23.0): ['2'], (35.0, 291.0, 6.0): ['-2'], (16.0, 307.0, 15.0): ['1'], (29.0, 307.0, 7.0): ['-2'], (24.0, 289.0, 15.0): ['2'], (15.0, 307.0, 30.0): ['2'], (31.0, 286.0, 8.0): ['1'], (19.0, 294.0, 25.0): ['1'], (25.0, 307.0, 2.0): ['1'], (22.0, 294.0, 25.0): ['1'], (24.0, 304.0, 10.0): ['-2'], (27.0, 310.0, 13.0): ['1'], (23.0, 296.0, 2.0): ['-2'], (20.0, 306.0, 8.0): ['-2'], (21.0, 308.0, 24.0): ['-2'], (22.0, 305.0, 18.0): ['1'], (34.0, 306.0, 3.0): ['2'], (23.0, 307.0, 10.0): ['-2'], (34.0, 288.0, 11.0): ['-2'], (12.0, 305.0, 24.0): ['2'], (18.0, 296.0, 23.0): ['-2'], (33.0, 307.0, 14.0): ['2'], (20.0, 295.0, 28.0): ['2'], (32.0, 304.0, 6.0): ['-2'], (25.0, 309.0, 10.0): ['1'], (22.0, 290.0, 14.0): ['2'], (21.0, 309.0, 13.0): ['-2'], (27.0, 306.0, 16.0): ['-2'], (21.0, 303.0, 6.0): ['2'], (23.0, 294.0, 18.0): ['-2'], (15.0, 300.0, 22.0): ['-2'], (19.0, 307.0, 29.0): ['1'], (31.0, 289.0, 9.0): ['-2'], (17.0, 310.0, 26.0): ['-2'], (30.0, 294.0, 1.0): ['-2'], (23.0, 311.0, 23.0): ['2'], (13.0, 310.0, 27.0): ['2'], (28.0, 306.0, 0.0): ['1'], (27.0, 289.0, 12.0): ['1'], (26.0, 308.0, 15.0): ['-2'], (36.0, 286.0, 5.0): ['2'], (26.0, 302.0, 4.0): ['1'], (25.0, 305.0, 7.0): ['-2'], (22.0, 292.0, 22.0): ['1'], (29.0, 302.0, 11.0): ['2'], (19.0, 303.0, 14.0): ['2'], (22.0, 311.0, 13.0): ['2'], (28.0, 288.0, 6.0): ['2'], (30.0, 290.0, 6.0): ['-2'], (16.0, 305.0, 13.0): ['2'], (29.0, 309.0, 5.0): ['1'], (27.0, 295.0, 16.0): ['-2'], (28.0, 310.0, 13.0): ['-2'], (18.0, 294.0, 28.0): ['2'], (27.0, 301.0, 1.0): ['2'], (32.0, 306.0, 3.0): ['1'], (34.0, 290.0, -3.0): ['2'], (20.0, 305.0, 28.0): ['1'], (24.0, 302.0, 8.0): ['1'], (27.0, 308.0, 15.0): ['-2'], (21.0, 295.0, 16.0): ['1'], (23.0, 302.0, 4.0): ['2'], (20.0, 304.0, 14.0): ['-2'], (20.0, 302.0, 11.0): ['2'], (20.0, 292.0, 24.0): ['2'], (38.0, 290.0, 2.0): ['1'], (22.0, 307.0, 16.0): ['-2'], (17.0, 308.0, 17.0): ['1'], (30.0, 292.0, 14.0): ['-2'], (18.0, 302.0, 29.0): ['1'], (16.0, 311.0, 25.0): ['1'], (14.0, 309.0, 24.0): ['-2'], (13.0, 308.0, 22.0): ['1'], (34.0, 290.0, 13.0): ['1'], (19.0, 308.0, 20.0): ['-2'], (26.0, 300.0, 5.0): ['2'], (26.0, 294.0, 14.0): ['-2'], (29.0, 294.0, 3.0): ['-2'], (25.0, 297.0, 13.0): ['2'], (24.0, 308.0, 4.0): ['1'], (21.0, 311.0, 19.0): ['1'], (27.0, 304.0, 18.0): ['2'], (23.0, 292.0, 16.0): ['-2'], (20.0, 308.0, 27.0): ['-2'], (18.0, 309.0, 20.0): ['1'], (31.0, 295.0, 11.0): ['-2'], (17.0, 304.0, 28.0): ['-2'], (30.0, 288.0, 3.0): ['-2'], (23.0, 309.0, 25.0): ['1'], (14.0, 305.0, 23.0): ['1'], (30.0, 293.0, 16.0): ['-2'], (19.0, 311.0, 22.0): ['1'], (28.0, 304.0, 6.0): ['-2'], (31.0, 286.0, 1.0): ['1'], (26.0, 310.0, 17.0): ['-2'], (35.0, 294.0, 2.0): ['1'], (29.0, 293.0, 7.0): ['2'], (25.0, 307.0, 25.0): ['2'], (22.0, 294.0, 16.0): ['-2'], (13.0, 297.0, 28.0): ['2'], (22.0, 296.0, 1.0): ['-2'], (24.0, 304.0, 1.0): ['2'], (21.0, 299.0, 24.0): ['-2'], (20.0, 296.0, 0.0): ['2'], (19.0, 311.0, 11.0): ['2'], (15.0, 294.0, 23.0): ['2'], (22.0, 305.0, 11.0): ['-2'], (33.0, 286.0, 2.0): ['-2'], (29.0, 311.0, 11.0): ['-2'], (29.0, 289.0, 12.0): ['-2'], (34.0, 288.0, 2.0): ['-2'], (28.0, 308.0, 3.0): ['-2'], (18.0, 296.0, 30.0): ['2'], (27.0, 299.0, 3.0): ['2'], (33.0, 293.0, 10.0): ['-2'], (17.0, 301.0, 22.0): ['-2'], (32.0, 304.0, 13.0): ['1'], (25.0, 303.0, 6.0): ['-2'], (16.0, 297.0, 21.0): ['2'], (22.0, 290.0, 21.0): ['2'], (27.0, 306.0, 9.0): ['-2'], (21.0, 303.0, 13.0): ['1'], (36.0, 307.0, 9.0): ['2'], (20.0, 310.0, 12.0): ['1'], (38.0, 288.0, -1.0): ['2'], (34.0, 287.0, 5.0): ['-2'], (21.0, 296.0, 15.0): ['1'], (17.0, 310.0, 19.0): ['2'], (30.0, 294.0, 8.0): ['2'], (21.0, 304.0, 22.0): ['1'], (16.0, 309.0, 27.0): ['-2'], (14.0, 311.0, 26.0): ['2'], (35.0, 305.0, 12.0): ['2'], (34.0, 292.0, 15.0): ['2'], (27.0, 289.0, 19.0): ['2'], (30.0, 287.0, 0.0): ['2'], (25.0, 305.0, 14.0): ['1'], (16.0, 298.0, 25.0): ['-2'], (25.0, 299.0, 3.0): ['2'], (22.0, 302.0, 10.0): ['1'], (24.0, 306.0, 6.0): ['-2'], (21.0, 297.0, 17.0): ['1'], (21.0, 291.0, 2.0): ['2'], (20.0, 298.0, 25.0): ['-2'], (26.0, 305.0, 20.0): ['2'], (18.0, 311.0, 22.0): ['1'], (30.0, 305.0, 6.0): ['-2'], (17.0, 306.0, 30.0): ['2'], (24.0, 296.0, 21.0): ['-2'], (32.0, 287.0, 1.0): ['-2'], (14.0, 307.0, 21.0): ['1'], (28.0, 310.0, 4.0): ['2'], (31.0, 284.0, 3.0): ['2'], (26.0, 296.0, 19.0): ['1'], (26.0, 290.0, 0.0): ['2'], (13.0, 299.0, 26.0): ['1'], (24.0, 302.0, 3.0): ['2'], (27.0, 308.0, 0.0): ['2'], (21.0, 301.0, 26.0): ['2'], (23.0, 302.0, 13.0): ['2'], (20.0, 292.0, 15.0): ['2'], (30.0, 310.0, 4.0): ['2'], (19.0, 309.0, 13.0): ['-2'], (22.0, 307.0, 9.0): ['-2'], (29.0, 313.0, 9.0): ['2'], (29.0, 291.0, 10.0): ['-2'], (34.0, 290.0, 4.0): ['-2'], (27.0, 291.0, 20.0): ['2'], (18.0, 298.0, 24.0): ['-2'], (26.0, 296.0, -3.0): ['2'], (33.0, 295.0, 12.0): ['1'], (17.0, 303.0, 16.0): ['2'], (26.0, 294.0, 5.0): ['1'], (25.0, 297.0, 4.0): ['1'], (22.0, 300.0, 23.0): ['1'], (22.0, 309.0, 28.0): ['2'], (27.0, 304.0, 11.0): ['2'], (20.0, 308.0, 18.0): ['-2'], (30.0, 311.0, 14.0): ['1'], (19.0, 305.0, 26.0): ['-2'], (17.0, 304.0, 21.0): ['2'], (30.0, 288.0, 10.0): ['-2'], (21.0, 306.0, 20.0): ['-2'], (16.0, 307.0, 29.0): ['1'], (14.0, 305.0, 28.0): ['1'], (34.0, 294.0, 1.0): ['-2'], (32.0, 291.0, -2.0): ['1'], (25.0, 307.0, 16.0): ['-2'], (25.0, 293.0, 1.0): ['-2'], (24.0, 304.0, 24.0): ['2'], (21.0, 299.0, 23.0): ['-2'], (21.0, 293.0, 0.0): ['2'], (26.0, 307.0, 22.0): ['2'], (33.0, 286.0, 11.0): ['1'], (32.0, 285.0, 3.0): ['1'], (29.0, 289.0, 7.0): ['1'], (28.0, 308.0, 10.0): ['-2'], (28.0, 290.0, 15.0): ['-2'], (31.0, 296.0, 12.0): ['1'], (32.0, 290.0, -2.0): ['1'], (26.0, 298.0, 21.0): ['2'], (17.0, 301.0, 25.0): ['-2'], (26.0, 292.0, 2.0): ['-2'], (32.0, 294.0, 5.0): ['1'], (29.0, 286.0, 6.0): ['2'], (29.0, 297.0, 0.0): ['1'], (13.0, 301.0, 24.0): ['1'], (27.0, 306.0, 6.0): ['-2'], (21.0, 303.0, 20.0): ['2'], (27.0, 312.0, 17.0): ['2'], (19.0, 307.0, 15.0): ['-2'], (31.0, 309.0, 9.0): ['-2'], (20.0, 307.0, 23.0): ['-2'], (34.0, 292.0, 6.0): ['-2'], (32.0, 301.0, 4.0): ['2'], (34.0, 302.0, 11.0): ['2'], (18.0, 300.0, 26.0): ['-2'], (33.0, 289.0, 14.0): ['1'], (29.0, 296.0, 14.0): ['-2'], (24.0, 296.0, 2.0): ['-2'], (19.0, 303.0, 24.0): ['-2'], (25.0, 308.0, 21.0): ['1'], (31.0, 307.0, 13.0): ['-2'], (17.0, 306.0, 23.0): ['-2'], (23.0, 292.0, -1.0): ['1'], (15.0, 302.0, 24.0): ['-2'], (30.0, 308.0, 5.0): ['-2'], (14.0, 307.0, 30.0): ['2'], (34.0, 296.0, 3.0): ['2'], (18.0, 304.0, 15.0): ['1'], (24.0, 293.0, -2.0): ['1'], (26.0, 290.0, 15.0): ['-2'], (35.0, 292.0, 5.0): ['-2'], (34.0, 305.0, 9.0): ['-2'], (21.0, 301.0, 21.0): ['2'], (20.0, 302.0, 29.0): ['2'], (31.0, 291.0, -1.0): ['-2'], (26.0, 309.0, 16.0): ['-2'], (29.0, 291.0, 1.0): ['-2'], (28.0, 292.0, 4.0): ['-2'], (15.0, 309.0, 27.0): ['-2'], (24.0, 292.0, -1.0): ['1'], (28.0, 288.0, 9.0): ['2'], (31.0, 302.0, 10.0): ['1'], (35.0, 295.0, 1.0): ['2'], (20.0, 306.0, 27.0): ['-2'], (32.0, 292.0, 3.0): ['-2'], (16.0, 300.0, 23.0): ['-2'], (25.0, 291.0, 4.0): ['2'], (27.0, 304.0, 4.0): ['-2'], (27.0, 294.0, 15.0): ['-2'], (21.0, 297.0, 3.0): ['2'], (19.0, 305.0, 17.0): ['-2'], (30.0, 306.0, 1.0): ['1'], (37.0, 291.0, 5.0): ['1'], (21.0, 306.0, 29.0): ['2'], (22.0, 292.0, -1.0): ['2'], (29.0, 295.0, 6.0): ['2'], (34.0, 294.0, 8.0): ['1'], (25.0, 293.0, 18.0): ['-2'], (26.0, 288.0, 16.0): ['2'], (22.0, 296.0, 19.0): ['-2'], (24.0, 294.0, 0.0): ['-2'], (20.0, 296.0, 22.0): ['-2'], (20.0, 294.0, 3.0): ['2'], (19.0, 301.0, 30.0): ['2'], (25.0, 310.0, 23.0): ['2'], (29.0, 298.0, -1.0): ['2'], (31.0, 305.0, 11.0): ['-2'], (21.0, 310.0, 16.0): ['-2'], (36.0, 292.0, 10.0): ['1'], (28.0, 290.0, 6.0): ['2'], (18.0, 306.0, 9.0): ['-2'], (31.0, 296.0, 5.0): ['2'], (26.0, 292.0, 13.0): ['-2'], (30.0, 303.0, 13.0): ['2'], (16.0, 302.0, 24.0): ['-2'], (34.0, 307.0, 11.0): ['1'], (21.0, 303.0, 27.0): ['2'], (12.0, 302.0, 27.0): ['2'], (23.0, 300.0, 24.0): ['2'], (26.0, 311.0, 18.0): ['1'], (25.0, 312.0, 15.0): ['2'], (37.0, 289.0, 10.0): ['2'], (21.0, 304.0, 4.0): ['2'], (36.0, 290.0, 2.0): ['-2'], (29.0, 293.0, 3.0): ['-2'], (28.0, 312.0, 14.0): ['2'], (15.0, 299.0, 25.0): ['-2'], (28.0, 294.0, 11.0): ['1'], (17.0, 297.0, 29.0): ['1'], (32.0, 290.0, 1.0): ['-2'], (23.0, 306.0, 21.0): ['-2'], (25.0, 299.0, 17.0): ['2'], (16.0, 298.0, 21.0): ['1'], (21.0, 291.0, 16.0): ['2'], (27.0, 292.0, 13.0): ['-2'], (26.0, 305.0, 2.0): ['-2'], (37.0, 293.0, 7.0): ['2'], (24.0, 311.0, 18.0): ['1'], (34.0, 311.0, 13.0): ['2'], (21.0, 308.0, 27.0): ['1'], (28.0, 288.0, 4.0): ['2'], (23.0, 289.0, 14.0): ['2'], (29.0, 297.0, 4.0): ['2'], (34.0, 296.0, 10.0): ['2'], (17.0, 309.0, 14.0): ['1'], (30.0, 301.0, 4.0): ['1'], (25.0, 295.0, 14.0): ['-2'], (29.0, 304.0, 12.0): ['1'], (28.0, 307.0, 20.0): ['2'], (33.0, 308.0, 6.0): ['1'], (21.0, 310.0, 26.0): ['1'], (32.0, 311.0, 14.0): ['2'], (19.0, 299.0, 28.0): ['-2'], (25.0, 304.0, 17.0): ['1'], (31.0, 311.0, 9.0): ['1'], (21.0, 296.0, 14.0): ['2'], (28.0, 288.0, 0.0): ['2'], (18.0, 308.0, 11.0): ['1'], (31.0, 302.0, 3.0): ['1'], (30.0, 297.0, 11.0): ['2'], (25.0, 297.0, 22.0): ['2'], (16.0, 300.0, 30.0): ['2'], (13.0, 303.0, 29.0): ['2'], (29.0, 308.0, 19.0): ['2'], (34.0, 309.0, 13.0): ['2'], (29.0, 300.0, 6.0): ['2'], (27.0, 294.0, 4.0): ['-2'], (30.0, 311.0, 9.0): ['-2'], (26.0, 297.0, 12.0): ['2'], (21.0, 306.0, 6.0): ['1'], (36.0, 288.0, 4.0): ['1'], (23.0, 291.0, 3.0): ['2'], (29.0, 295.0, 13.0): ['-2'], (18.0, 302.0, 27.0): ['-2'], (28.0, 292.0, 5.0): ['1'], (31.0, 290.0, 6.0): ['-2'], (22.0, 309.0, 17.0): ['-2'], (32.0, 288.0, 15.0): ['2'], (35.0, 294.0, 0.0): ['1'], (23.0, 304.0, 24.0): ['2'], (22.0, 296.0, 26.0): ['1'], (24.0, 294.0, 11.0): ['2'], (21.0, 293.0, 18.0): ['-2'], (27.0, 290.0, 11.0): ['1'], (26.0, 307.0, 0.0): ['2'], (28.0, 291.0, -1.0): ['1'], (19.0, 301.0, 21.0): ['2'], (25.0, 310.0, 24.0): ['2'], (24.0, 299.0, 20.0): ['2'], (24.0, 309.0, 16.0): ['-2'], (21.0, 310.0, 25.0): ['1']}
sparse2 = sparse1.copy()
subCubes = tuple(np.arange(-6,7))
cube = np.array(list(itertools.product(subCubes, subCubes, subCubes)))
for i in cube:
for d in sparse1:
coor = float(sparse1.get(d)[0])
if coor > 0 :
value=0#float(sparse1.get(tuple(d))[0])
for c in cube:
value = value + max(0,float(sparse1.get(tuple(d+c),"0")[0]))
procentValue = coor/float(value)
sparse2[d] = [str(procentValue)]
else:
sparse2[d] = [str(0.0)]
答案 0 :(得分:1)
虽然您的解决方案很聪明,但由于将sparse1
中的每个键视为与其他所有键完全无关,除非通过临时查找表cube
,否则会增加不必要的处理。如果您预处理sparse1
以计算键所描述的几何值之间的Chebyshev distances,则可以使用它来查找相邻值并对它们求和。这消除了cube
数组上的循环,将其替换为更高效的索引和总和。
这是尝试使用来自sklearn.neighbors的radius_neighbors_graph
复制代码:
import numpy as np
from sklearn.neighbors import radius_neighbors_graph
sparse1 = ...
X = np.array([list(k) for k in sparse1.keys()])
N = radius_neighbors_graph(X, radius=6, metric='chebyshev').astype(bool)
Y = np.array([max(0, float(v[0])) for v in sparse1.values()])
sparse2 = {}
for x, y, n in zip(X, Y, N):
t = tuple(x)
if sparse1[t][0][0] == '-': # check the string value rather than converting
sparse2[t] = sparse1[t]
else:
v = Y[np.squeeze(n.toarray())].sum() # eliminates looping over cube
v += y # radius_neighbors_graph does not consider a point a neighbor of itself
v += y # potential bug in OP? See below.
if v <= 0:
p = 1.
else:
p = y / v
sparse2[t] = [str(p)]
这里有一些值得注意的事情:
X
,这会占用内存。N
很稀疏,所以不会太多)。Y
中,这也会花费内存,但可以节省不得不重复执行转换。value=float(sparse1.get(tuple(d))[0])
复制在循环(0,0,0)
时从cube
添加值,因此OP会将此值加两次。 运行一些简单的基准测试,这个版本的算法运行速度提高了70倍左右。我的猜测大部分来自于移除cube
上的循环。