2017-06-09 113 views
0

我有一个3D元组坐标作为键和字符串分数作为值的字典。现在我想获得一个新的列表/字典/坐标数组,它应该是12x12x12框中坐标的百分比值和所有周围的坐标。有没有比像我的第一种方法从字典中获取坐标更快的方法? (sparse1是具有原始坐标的字典)。在代码sparse1只是从一个管坐标提取(因为我不知道如何在这里添加更多的字符:():Python:计算坐标相对于周围坐标的百分比

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)] 

回答

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)] 

这里有一个值得注意的几件事情:

  1. 我转换的元组键进入numpy的阵列X,这成本记忆。
  2. 我先执行邻居计算并存储它们,这会花费内存(尽管N很稀疏,所以不要太多)。
  3. 我将地图的值转换为浮动一次,并将它们存储在Y中,这也会花费内存,但不必保存重复执行的转换。
  4. 标记为潜在错误的行复制了算法的一个功能:value=float(sparse1.get(tuple(d))[0])复制了在cube上循环时从(0,0,0)添加的值,因此OP会将该值添加两次。

运行一些简单的基准测试,该算法的版本运行速度快70倍左右。我的猜测大部分来自cube的循环移除。

+0

好的,这看起来非常快。万分感谢!!!!!。我做了一个测试,但我认为有一些东西缺失。所以我的代码产生了一个字典sparse2,它没有负值,只有输出中的百分比值。在新方法中,输出中存在负值。还有一些我不明白的东西。也许你可以解释它们:)所以表达式“for x,y,n in zip(X,Y,N)”分别在X中循环x,在Y中是y,在N中是n?切比雪夫的距离到底是什么?我试图理解这篇wiki文章,但还不明白。 – Varlor

+0

它计算点与点之间的最大差异,但是会发生什么?什么是挤压正在做。我读过它消除了不必要的维度,究竟意味着什么? 最好的方面! – Varlor

+0

@Varlor,你确定地图中没有负值吗?将'sparse1'复制到'sparse2'中,然后在'sparse1'的'for'循环中有条件的'if float(sparse1.get(d)[0])> = 0:''。在'sparse1'中的任何负值都不会被循环修改,这意味着'sparse2'仍然会包含它们。 – PaSTE