convert finger template data to image - python

I have finger template data of size 498. I want to convert it to an image. the template does not have any size, the length of template data is 498 bytes.This is the template data.
i tried using this, 'Image.frombuffer('L', (498,1), ba, 'raw', 'L', 0, 1)' but gives only single white line in black background
[4, 41, 80, 3, 41, 130, 134, 225, 196, 184, 63, 255, 137, 50, 182, 95, 3, 86, 250, 7, 218, 114, 246, 93, 132, 101, 56, 224, 233, 234, 185, 149, 132, 245, 245, 239, 1, 171, 245, 214, 66, 198, 133, 254, 18, 19, 247, 92, 72, 151, 118, 152, 21, 131, 248, 128, 74, 103, 172, 72, 37, 163, 233, 146, 196, 54, 244, 15, 85, 91, 229, 89, 195, 22, 64, 200, 73, 131, 246, 215, 133, 166, 137, 237, 85, 27, 246, 85, 68, 70, 122, 208, 134, 179, 246, 77, 199, 119, 246, 184, 145, 147, 247, 73, 143, 217, 240, 152, 149, 3, 56, 8, 183, 58, 13, 10, 181, 131, 248, 29, 80, 8, 1, 1, 217, 131, 248, 32, 11, 248, 250, 232, 245, 99, 245, 83, 196, 22, 192, 183, 21, 156, 246, 60, 74, 104, 106, 209, 14, 212, 233, 155, 195, 248, 247, 231, 21, 236, 245, 66, 136, 87, 102, 201, 33, 92, 233, 149, 1, 200, 185, 224, 50, 100, 248, 31, 8, 184, 120, 7, 62, 20, 247, 52, 9, 136, 108, 201, 62, 4, 248, 33, 11, 185, 116, 239, 105, 156, 246, 179, 78, 40, 203, 45, 121, 204, 248, 156, 196, 117, 77, 215, 138, 20, 247, 175, 77, 57, 203, 221, 149, 156, 213, 40, 28, 186, 108, 36, 182, 252, 248, 145, 7, 185, 139, 200, 210, 180, 248, 142, 199, 167, 139, 200, 209, 252, 233, 140, 70, 248, 197, 208, 233, 12, 246, 155, 140, 105, 151, 168, 9, 213, 246, 143, 8, 152, 215, 200, 26, 29, 233, 130, 132, 249, 71, 233, 38, 37, 248, 134, 7, 199, 5, 217, 73, 69, 248, 128, 197, 214, 3, 225, 133, 93, 247, 126, 131, 215, 1, 225, 158, 237, 247, 4, 65, 7, 194, 39, 73, 28, 117, 86, 133, 198, 255, 127, 121, 165, 117, 121, 194, 24, 126, 250, 161, 45, 121, 125, 128, 246, 193, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 99, 35, 114, 51, 162, 86, 36, 33, 70, 65, 51, 69, 116, 52, 70, 70, 50, 83, 34, 54, 83, 49, 63, 67, 34, 50, 85, 109, 48, 245, 50, 98, 134, 49, 101, 1, 63, 95, 66, 101, 19, 51, 35, 55, 52, 113, 100, 82, 86, 18, 35, 114, 49, 20, 134, 67, 20, 115, 246, 36, 49, 68, 53, 19, 65, 33, 69, 52, 38, 65, 115, 19, 21, 53, 83, 68, 82, 50, 68, 113, 51, 67, 65, 47, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 203]

What's the format of your template ?
Often template is a list of minutiae so it cannot be converted in image.
Take a look at https://en.wikipedia.org/wiki/Fingerprint

Related

converting decimal to actual bytes

I have a task which is to extract and analyse a payload. the payload is stored in the array below:
byte[] source = new byte[449]
{
252, 72, 131, 228, 240, 232, 204,
0, 0, 0, 65, 81, 65, 80,
82, 81, 72, 49, 210, 86,
101, 72, 139, 82, 96, 72, 139,
82, 24, 72, 139, 82, 32,
72, 139, 114, 80, 77, 49, 201, 72,
15, 183, 74, 74, 72, 49, 192, 172,
60, 97, 124, 2, 44, 32,
65, 193, 201, 13, 65, 1, 193, 226,
237, 82, 72, 139,82, 32, 139, 66,
60, 72, 1, 208, 102, 129, 120, 24, 11,
2,65, 81, 15, 133, 114, 0, 0, 0,
139, 128, 136, 0, 0, 0, 72, 133,
192, 116, 103, 72, 1, 208, 80, 139,
72, 24, 68, 139, 64, 32, 73, 1, 208,
227, 86, 72, 255, 201, 65, 139, 52, 136,
72, 1, 214, 77, 49, 201, 72, 49,
192, 172, 65, 193, 201, 13, 65, 1,
193, 56, 224, 117, 241, 76, 3, 76,
36, 8, 69, 57, 209, 117, 216, 88, 68,
139, 64, 36, 73, 1, 208, 102, 65, 139,
12, 72, 68, 139, 64, 28, 73, 1, 208,
65, 139, 4, 136, 65, 88, 65, 88,
72, 1, 208, 94, 89, 90, 65, 88, 65,
89, 65, 90, 72, 131, 236, 32, 65,
82, 255, 224, 88, 65, 89, 90, 72, 139, 18,
233, 75, 255, 255, 255, 93, 73,
190, 119, 115, 50, 95, 51, 50, 0, 0,
65, 86, 73, 137, 230, 72, 129,
236, 160, 1, 0, 0, 73, 137, 229, 73,
188, 2, 0, 1, 187, 51, 161, 134, 90,
65, 84, 73, 137, 228, 76, 137, 241,
65, 186, 76, 119, 38, 7, 255, 213, 76,
137, 234, 104, 1, 1, 0, 0, 89,
65, 186, 41, 128, 107, 0, 255, 213, 106, 10,
65, 94, 80, 80, 77, 49, 201,77, 49, 192, 72,
255, 192, 72, 137, 194,
72, 255, 192, 72, 137, 193, 65,
186, 234, 15, 223, 224, 255, 213, 72, 137,
199, 106, 16, 65, 88, 76, 137, 226, 72,
137, 249, 65, 186, 153, 165, 116, 97,
255, 213, 133, 192, 116, 12, 73, 255,
206, 117, 229, 104, 240, 181, 162, 86,
255, 213, 72, 131, 236, 16, 72, 137,
226, 77, 49, 201, 106, 4, 65, 88,
72, 137, 249, 65, 186, 2, 217, 200, 95,
255, 213, 72, 131, 196, 32, 94, 137,
246, 106, 64, 65, 89, 104, 0,
16, 0, 0, 65, 88, 72, 137, 242,
72, 49, 201, 65, 186, 88, 164, 83,
229, 255, 213, 72, 137, 195, 73, 137,
199, 77, 49, 201, 73, 137, 240,
72, 137, 218, 72, 137, 249, 65, 186, 2,
217, 200, 95, 255, 213, 72,
1, 195, 72, 41, 198, 72, 133, 246, 117,
225, 65, 255, 231,
};
can anyone help with this? like how to convert it e.g writing a python script or if there are any online converters (I looked but I couldn't find anything).
I need it in actual bytes format so I can analyse it and understand what the payload does exactly.
note - I do not mean the data type byte
thanks
This is an unusual question, as you're already creating a Java bytes object, but if you want a Python bytes object, you can use bytes.
From the documentation:
bytes(iterable_of_ints) -> bytes
bytes(string, encoding[, errors]) -> bytes
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
bytes() -> empty bytes object
Construct an immutable array of bytes from:
- an iterable yielding integers in range(256)
- a text string encoded using the specified encoding
- any object implementing the buffer API.
- an integer
In this case, we're interested in bytes(iterable_of_ints), which we pass a Python list of your arguments.
source=[
252, 72, 131, 228, 240, 232, 204,
0, 0, 0, 65, 81, 65, 80,
82, 81, 72, 49, 210, 86,
101, 72, 139, 82, 96, 72, 139,
82, 24, 72, 139, 82, 32,
72, 139, 114, 80, 77, 49, 201, 72,
15, 183, 74, 74, 72, 49, 192, 172,
60, 97, 124, 2, 44, 32,
65, 193, 201, 13, 65, 1, 193, 226,
237, 82, 72, 139,82, 32, 139, 66,
60, 72, 1, 208, 102, 129, 120, 24, 11,
2,65, 81, 15, 133, 114, 0, 0, 0,
139, 128, 136, 0, 0, 0, 72, 133,
192, 116, 103, 72, 1, 208, 80, 139,
72, 24, 68, 139, 64, 32, 73, 1, 208,
227, 86, 72, 255, 201, 65, 139, 52, 136,
72, 1, 214, 77, 49, 201, 72, 49,
192, 172, 65, 193, 201, 13, 65, 1,
193, 56, 224, 117, 241, 76, 3, 76,
36, 8, 69, 57, 209, 117, 216, 88, 68,
139, 64, 36, 73, 1, 208, 102, 65, 139,
12, 72, 68, 139, 64, 28, 73, 1, 208,
65, 139, 4, 136, 65, 88, 65, 88,
72, 1, 208, 94, 89, 90, 65, 88, 65,
89, 65, 90, 72, 131, 236, 32, 65,
82, 255, 224, 88, 65, 89, 90, 72, 139, 18,
233, 75, 255, 255, 255, 93, 73,
190, 119, 115, 50, 95, 51, 50, 0, 0,
65, 86, 73, 137, 230, 72, 129,
236, 160, 1, 0, 0, 73, 137, 229, 73,
188, 2, 0, 1, 187, 51, 161, 134, 90,
65, 84, 73, 137, 228, 76, 137, 241,
65, 186, 76, 119, 38, 7, 255, 213, 76,
137, 234, 104, 1, 1, 0, 0, 89,
65, 186, 41, 128, 107, 0, 255, 213, 106, 10,
65, 94, 80, 80, 77, 49, 201,77, 49, 192, 72,
255, 192, 72, 137, 194,
72, 255, 192, 72, 137, 193, 65,
186, 234, 15, 223, 224, 255, 213, 72, 137,
199, 106, 16, 65, 88, 76, 137, 226, 72,
137, 249, 65, 186, 153, 165, 116, 97,
255, 213, 133, 192, 116, 12, 73, 255,
206, 117, 229, 104, 240, 181, 162, 86,
255, 213, 72, 131, 236, 16, 72, 137,
226, 77, 49, 201, 106, 4, 65, 88,
72, 137, 249, 65, 186, 2, 217, 200, 95,
255, 213, 72, 131, 196, 32, 94, 137,
246, 106, 64, 65, 89, 104, 0,
16, 0, 0, 65, 88, 72, 137, 242,
72, 49, 201, 65, 186, 88, 164, 83,
229, 255, 213, 72, 137, 195, 73, 137,
199, 77, 49, 201, 73, 137, 240,
72, 137, 218, 72, 137, 249, 65, 186, 2,
217, 200, 95, 255, 213, 72,
1, 195, 72, 41, 198, 72, 133, 246, 117,
225, 65, 255, 231,
]
my_bytes=bytes(source)
print(my_bytes)
```
Presumably you want to take a number represented by a decimal string and convert in to a sting of 8 0's and 1's (i.e. have leading 0's)
The way to do this is
a='100'
format(int(a),'0=8b')
'01100100'
If you want to apply it to every string in a list you can use map
a=['0','1','2']
list(map(lambda k: format(int(k),'0=8b'),a))
['00000000', '00000001', '00000010']

Thermal Image Processing

I'm trying to stream FLIR Lepton 3.5 with Python OPENCV using "VideoCapture" & "cv2.imshow" script. Then, I'll do some detection and control. Here's the problem I have, I was only able to get a very faint black/gray video stream with what seems to be a couple of rows of dead pixels at the bottom of the stream. This is expected since the output is supposed to be 16-Bit RAW image data. So,
I'm trying to convert to RGB888 image data so the stream has "colors".
Why is the stream video in static mode, it doesn't stream video like normal embedded notebook webcam?
I've tried the codes/scripts that were shared by others and even the example code from FLIR application notes, but didn't work. Your help is appreciated.
Environment: Windows 10, Python 3.7.6, PyCharm, OpenCV (latest), FLIR Lepton 3.5 camera/PureThermal2
Code:
import cv2
import numpy as np
image_counter = 0
video = cv2.VideoCapture(0,cv2.CAP_DSHOW)
video.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
video.set(cv2.CAP_PROP_CONVERT_RGB, 0)
if video.isOpened(): # try to get the first frame
rval, frame = video.read()
else:
rval = False
while rval:
normed = cv2.normalize(frame, None, 0, 65535, cv2.NORM_MINMAX)
nor=cv2.cvtColor(np.uint8(normed),cv2.COLOR_GRAY2BGR)
cv2.imshow("preview", cv2.resize(nor, dsize= (640, 480), interpolation = cv2.INTER_LINEAR))
key = cv2.waitKey(1)
if key == 27: # exit on ESC
break
It's challenging to give an answer without having the camera.
Please note that I could not verify my solution.
I found the following issues with your code:
rval, frame = video.read() must be inside the while loop.
The code grabs the next frame.
If you want to grab more than one frame, you should execute it in a loop.
normed = cv2.normalize(frame, None, 0, 65535, cv2.NORM_MINMAX)
Returns uint16 values in range [0, 65535].
You are getting an overflow when converting to uint8 by np.uint8(normed).
I recommend normalizing to range [0, 255].
You may also select the type of the result to be uint8:
normed = cv2.normalize(frame, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
Here is the complete updated code (not tested):
import cv2
import numpy as np
image_counter = 0
video = cv2.VideoCapture(0,cv2.CAP_DSHOW)
video.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
video.set(cv2.CAP_PROP_CONVERT_RGB, 0)
if video.isOpened(): # try to get the first frame
rval, frame = video.read()
else:
rval = False
# Create an object for executing CLAHE.
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
while rval:
# Get a Region of Interest slice - ignore the last 3 rows.
frame_roi = frame[:-3, :]
# Normalizing frame to range [0, 255], and get the result as type uint8.
normed = cv2.normalize(frame_roi, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
# Apply CLAHE - contrast enhancement.
# Note: apply the CLAHE on the uint8 image after normalize.
# CLAHE supposed to work with uint16 - you may try using it without using cv2.normalize
cl1 = clahe.apply(normed)
nor = cv2.cvtColor(cl1, cv2.COLOR_GRAY2BGR) # Convert gray-scale to BGR (no really needed).
cv2.imshow("preview", cv2.resize(nor, dsize=(640, 480), interpolation=cv2.INTER_LINEAR))
key = cv2.waitKey(1)
if key == 27: # exit on ESC
break
# Grab the next frame from the camera.
rval, frame = video.read()
Colorizing:
https://groups.google.com/g/flir-lepton/c/Cm8lGQyspmk
Result:
Here is the code sample with colorizing (using "Iron Black" color map):
import cv2
import numpy as np
# https://groups.google.com/g/flir-lepton/c/Cm8lGQyspmk
def generateColourMap():
"""
Conversion of the colour map from GetThermal to a numpy LUT:
https://github.com/groupgets/GetThermal/blob/bb467924750a686cc3930f7e3a253818b755a2c0/src/dataformatter.cpp#L6
"""
lut = np.zeros((256, 1, 3), dtype=np.uint8)
colormapIronBlack = [
255, 255, 255, 253, 253, 253, 251, 251, 251, 249, 249, 249, 247, 247,
247, 245, 245, 245, 243, 243, 243, 241, 241, 241, 239, 239, 239, 237,
237, 237, 235, 235, 235, 233, 233, 233, 231, 231, 231, 229, 229, 229,
227, 227, 227, 225, 225, 225, 223, 223, 223, 221, 221, 221, 219, 219,
219, 217, 217, 217, 215, 215, 215, 213, 213, 213, 211, 211, 211, 209,
209, 209, 207, 207, 207, 205, 205, 205, 203, 203, 203, 201, 201, 201,
199, 199, 199, 197, 197, 197, 195, 195, 195, 193, 193, 193, 191, 191,
191, 189, 189, 189, 187, 187, 187, 185, 185, 185, 183, 183, 183, 181,
181, 181, 179, 179, 179, 177, 177, 177, 175, 175, 175, 173, 173, 173,
171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163,
163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153,
153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145,
143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135,
135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124,
124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 116, 116, 116,
114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106,
106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96,
96, 94, 94, 94, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 84, 84,
84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72,
72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 64, 64, 64, 62, 62, 62, 60, 60,
60, 58, 58, 58, 56, 56, 56, 54, 54, 54, 52, 52, 52, 50, 50, 50, 48, 48,
48, 46, 46, 46, 44, 44, 44, 42, 42, 42, 40, 40, 40, 38, 38, 38, 36, 36,
36, 34, 34, 34, 32, 32, 32, 30, 30, 30, 28, 28, 28, 26, 26, 26, 24, 24,
24, 22, 22, 22, 20, 20, 20, 18, 18, 18, 16, 16, 16, 14, 14, 14, 12, 12,
12, 10, 10, 10, 8, 8, 8, 6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 0, 0, 9,
2, 0, 16, 4, 0, 24, 6, 0, 31, 8, 0, 38, 10, 0, 45, 12, 0, 53, 14, 0,
60, 17, 0, 67, 19, 0, 74, 21, 0, 82, 23, 0, 89, 25, 0, 96, 27, 0, 103,
29, 0, 111, 31, 0, 118, 36, 0, 120, 41, 0, 121, 46, 0, 122, 51, 0, 123,
56, 0, 124, 61, 0, 125, 66, 0, 126, 71, 0, 127, 76, 1, 128, 81, 1, 129,
86, 1, 130, 91, 1, 131, 96, 1, 132, 101, 1, 133, 106, 1, 134, 111, 1,
135, 116, 1, 136, 121, 1, 136, 125, 2, 137, 130, 2, 137, 135, 3, 137,
139, 3, 138, 144, 3, 138, 149, 4, 138, 153, 4, 139, 158, 5, 139, 163,
5, 139, 167, 5, 140, 172, 6, 140, 177, 6, 140, 181, 7, 141, 186, 7,
141, 189, 10, 137, 191, 13, 132, 194, 16, 127, 196, 19, 121, 198, 22,
116, 200, 25, 111, 203, 28, 106, 205, 31, 101, 207, 34, 95, 209, 37,
90, 212, 40, 85, 214, 43, 80, 216, 46, 75, 218, 49, 69, 221, 52, 64,
223, 55, 59, 224, 57, 49, 225, 60, 47, 226, 64, 44, 227, 67, 42, 228,
71, 39, 229, 74, 37, 230, 78, 34, 231, 81, 32, 231, 85, 29, 232, 88,
27, 233, 92, 24, 234, 95, 22, 235, 99, 19, 236, 102, 17, 237, 106, 14,
238, 109, 12, 239, 112, 12, 240, 116, 12, 240, 119, 12, 241, 123, 12,
241, 127, 12, 242, 130, 12, 242, 134, 12, 243, 138, 12, 243, 141, 13,
244, 145, 13, 244, 149, 13, 245, 152, 13, 245, 156, 13, 246, 160, 13,
246, 163, 13, 247, 167, 13, 247, 171, 13, 248, 175, 14, 248, 178, 15,
249, 182, 16, 249, 185, 18, 250, 189, 19, 250, 192, 20, 251, 196, 21,
251, 199, 22, 252, 203, 23, 252, 206, 24, 253, 210, 25, 253, 213, 27,
254, 217, 28, 254, 220, 29, 255, 224, 30, 255, 227, 39, 255, 229, 53,
255, 231, 67, 255, 233, 81, 255, 234, 95, 255, 236, 109, 255, 238, 123,
255, 240, 137, 255, 242, 151, 255, 244, 165, 255, 246, 179, 255, 248,
193, 255, 249, 207, 255, 251, 221, 255, 253, 235, 255, 255, 24]
def colormapChunk(ulist, step):
return map(lambda i: ulist[i: i + step], range(0, len(ulist), step))
chunks = colormapChunk(colormapIronBlack, 3)
red = []
green = []
blue = []
for chunk in chunks:
red.append(chunk[0])
green.append(chunk[1])
blue.append(chunk[2])
lut[:, 0, 0] = blue
lut[:, 0, 1] = green
lut[:, 0, 2] = red
return lut
# Generate color map - used for colorizing the video frame.
colorMap = generateColourMap()
image_counter = 0
video = cv2.VideoCapture(0,cv2.CAP_DSHOW)
video.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
video.set(cv2.CAP_PROP_CONVERT_RGB, 0)
if video.isOpened(): # try to get the first frame
rval, frame = video.read()
else:
rval = False
# Create an object for executing CLAHE.
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
while rval:
# Get a Region of Interest slice - ignore the last 3 rows.
frame_roi = frame[:-3, :]
# Normalizing frame to range [0, 255], and get the result as type uint8.
normed = cv2.normalize(frame_roi, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
# Apply CLAHE - contrast enhancement.
# Note: apply the CLAHE on the uint8 image after normalize.
# CLAHE supposed to work with uint16 - you may try using it without using cv2.normalize
cl1 = clahe.apply(normed)
nor = cv2.cvtColor(cl1, cv2.COLOR_GRAY2BGR) # Convert gray-scale to BGR (no really needed).
colorized_img = cv2.LUT(nor, colorMap) # Colorize the gray image with "false colors".
cv2.imshow("preview", cv2.resize(colorized_img, dsize=(640, 480), interpolation=cv2.INTER_LINEAR))
key = cv2.waitKey(1)
if key == 27: # exit on ESC
break
# Grab the next frame from the camera.
rval, frame = video.read()
Note:
The IR sensor is not a colored sensor.
Colorizing the frames uses "false colors" - colorizing may used for eustatic purposes.
The "false colors" has no physical meaning.
There are many ways to colorize an IR image, and there is no "standard colorization" method.
For colorizing you could try radiometric_image=cv2.applyColorMap(radiometric_image,cv2.COLORMAP_JET)
Previously having a temperature data, modified to normalized data by radiometric_image=cam_source.raw_to_8bit(thermal_frame)
It works for me on Lepton 3.5 on Nano

Python : Creating raw ECC-ECDSA-SECP256R1 private(32-bytes) and public(64-bytes) keys

I want to generate raw 32-bytes private key and raw 64-bytes public key (ECC-SECP256R1) using Python.
Which library should I install in my Python 3.7 and what APIs do I call to be able to generate raw keys?
Please help.
TIA.
The ECDSA library can do this.
Generate a key pair:
import ecdsa
sk = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
# Your byte values will vary, each time you generate(). Here is an example pair.
skBytes = sk.to_string()
print(f"Signing key = {[b for b in skBytes]}")
# [242, 122, 66, 46, 189, 185, 103, 40, 162, 156, 155, 213, 77, 38, 251, 23, 148, 207, 49, 206, 122, 63, 117, 150, 196, 115, 82, 203, 95, 104, 60, 227]
vkBytes = vk.to_string()
print(f"Verifying key = {[b for b in vkBytes]}")
# [31, 164, 220, 214, 106, 22, 45, 112, 244, 49, 124, 250, 217, 209, 51, 83, 161, 239, 137, 124, 25, 220, 112, 116, 80, 9, 64, 130, 9, 27, 92, 198, 123, 146, 213, 154, 142, 148, 90, 6, 142, 177, 31, 151, 215, 9, 216, 36, 51, 27, 222, 224, 132, 7, 39, 227, 48, 31, 244, 218, 206, 59, 249, 196]
The key pair can be restored from bytes:
skBytes = bytes([242, 122, 66, 46, 189, 185, 103, 40, 162, 156, 155, 213, 77, 38, 251, 23, 148, 207, 49, 206, 122, 63, 117, 150, 196, 115, 82, 203, 95, 104, 60, 227])
vkBytes = bytes([31, 164, 220, 214, 106, 22, 45, 112, 244, 49, 124, 250, 217, 209, 51, 83, 161, 239, 137, 124, 25, 220, 112, 116, 80, 9, 64, 130, 9, 27, 92, 198, 123, 146, 213, 154, 142, 148, 90, 6, 142, 177, 31, 151, 215, 9, 216, 36, 51, 27, 222, 224, 132, 7, 39, 227, 48, 31, 244, 218, 206, 59, 249, 196])
sk = ecdsa.SigningKey.from_string(skBytes, curve=ecdsa.SECP256k1)
vk = ecdsa.VerifyingKey.from_string(vkBytes, curve=ecdsa.SECP256k1)
# or vk = sk.get_verifying_key()
Example signing and verifying:
message = b"Hello, world!"
signature = sk.sign(message)
print(f"{[b for b in signature]}")
# [161, 22, 110, 48, 232, 36, 152, 153, 22, 7, 177, 219, 157, 102, 237, 57, 243, 216, 186, 207, 22, 168, 170, 247, 216, 235, 160, 13, 35, 37, 141, 237, 63, 50, 84, 31, 203, 95, 212, 91, 13, 150, 156, 125, 255, 197, 30, 133, 193, 174, 129, 174, 192, 33, 90, 160, 243, 78, 96, 92, 38, 1, 237, 129]
isSignatureValid = vk.verify(signature, message)
print(f"{isSignatureValid=}")
# isSignatureValid=True
Credit to this question for introducing me to the ecdsa package:
ECDSA Signing and Verifying issue between python ECDSA and C micro-ecc library

Is there a way to make this sequence creator faster?

I hope someone can give me some tips on how to speed up the following process. Its not really slow, but any time won could be very helpful.
from datetime import datetime
START_CLOCK = datetime.now()
TotalNumbcol = 266
NeighborsperColumn = [[3, 2, 5, 6, 7], [3, 6, 1, 7, 5, 4, 10, 11, 12, 13], [7, 2, 1, 6, 5, 11, 12, 13], [5, 10, 11, 9, 2, 6, 8, 12, 16, 17, 18, 19, 20], [6, 11, 4, 2, 12, 10, 1, 3, 7, 9, 13, 17, 18, 19, 20], [7, 12, 5, 2, 3, 13, 11, 1, 4, 10, 18, 19, 20], [13, 6, 3, 12, 2, 1, 5, 11, 19, 20], [9, 16, 17, 15, 4, 10, 14, 18, 24, 25, 26, 27, 28], [10, 17, 8, 4, 18, 16, 5, 11, 15, 19, 25, 26, 27, 28, 29], [11, 18, 9, 4, 5, 19, 17, 2, 6, 8, 12, 16, 20, 26, 27, 28, 29], [12, 19, 10, 5, 6, 20, 18, 4, 2, 3, 7, 9, 13, 17, 27, 28, 29], [13, 20, 11, 6, 7, 19, 5, 2, 3, 4, 10, 18, 28, 29], [12, 7, 20, 6, 2, 3, 5, 11, 19, 29], [15, 24, 25, 23, 8, 16, 22, 26, 34, 35, 36, 37, 38], [16, 25, 14, 8, 26, 24, 9, 17, 23, 27, 35, 36, 37, 38, 39], [17, 26, 15, 8, 9, 27, 25, 4, 10, 14, 18, 24, 28, 36, 37, 38, 39, 40], [18, 27, 16, 9, 10, 28, 26, 8, 4, 5, 11, 15, 19, 25, 29, 37, 38, 39, 40, 41], [19, 28, 17, 10, 11, 29, 27, 9, 4, 5, 6, 8, 12, 16, 20, 26, 38, 39, 40, 41], [20, 29, 18, 11, 12, 28, 10, 4, 5, 6, 7, 9, 13, 17, 27, 39, 40, 41], [19, 12, 13, 29, 11, 4, 5, 6, 7, 10, 18, 28, 40, 41], [22, 33, 34, 32, 23, 31, 35, 45, 46, 47, 48, 49], [23, 34, 21, 35, 33, 14, 24, 32, 36, 46, 47, 48, 49, 50], [24, 35, 22, 14, 36, 34, 15, 21, 25, 33, 37, 47, 48, 49, 50, 51], [25, 36, 23, 14, 15, 37, 35, 8, 16, 22, 26, 34, 38, 48, 49, 50, 51, 52], [26, 37, 24, 15, 16, 38, 36, 14, 8, 9, 17, 23, 27, 35, 39, 49, 50, 51, 52, 53], [27, 38, 25, 16, 17, 39, 37, 15, 8, 9, 10, 14, 18, 24, 28, 36, 40, 50, 51, 52, 53, 54], [28, 39, 26, 17, 18, 40, 38, 16, 8, 9, 10, 11, 15, 19, 25, 29, 37, 41, 51, 52, 53, 54], [29, 40, 27, 18, 19, 41, 39, 17, 8, 9, 10, 11, 12, 16, 20, 26, 38, 52, 53, 54], [41, 28, 19, 20, 40, 18, 9, 10, 11, 12, 13, 17, 27, 39, 53, 54], [31, 44, 45, 43, 32, 42, 46, 58, 59, 60, 61, 62], [32, 45, 30, 46, 44, 21, 33, 43, 47, 59, 60, 61, 62, 63], [33, 46, 31, 21, 47, 45, 22, 30, 34, 44, 48, 60, 61, 62, 63, 64], [34, 47, 32, 21, 22, 48, 46, 23, 31, 35, 45, 49, 61, 62, 63, 64, 65], [35, 48, 33, 22, 23, 49, 47, 21, 14, 24, 32, 36, 46, 50, 62, 63, 64, 65, 66], [36, 49, 34, 23, 24, 50, 48, 22, 14, 15, 21, 25, 33, 37, 47, 51, 63, 64, 65, 66, 67], [37, 50, 35, 24, 25, 51, 49, 23, 14, 15, 16, 22, 26, 34, 38, 48, 52, 64, 65, 66, 67, 68], [38, 51, 36, 25, 26, 52, 50, 24, 14, 15, 16, 17, 23, 27, 35, 39, 49, 53, 65, 66, 67, 68, 69], [39, 52, 37, 26, 27, 53, 51, 25, 14, 15, 16, 17, 18, 24, 28, 36, 40, 50, 54, 66, 67, 68, 69], [40, 53, 38, 27, 28, 54, 52, 26, 15, 16, 17, 18, 19, 25, 29, 37, 41, 51, 67, 68, 69], [41, 54, 39, 28, 29, 53, 27, 16, 17, 18, 19, 20, 26, 38, 52, 68, 69], [40, 29, 54, 28, 17, 18, 19, 20, 27, 39, 53, 69], [43, 58, 59, 57, 30, 44, 56, 60, 74, 75, 76, 77, 78], [44, 59, 42, 30, 60, 58, 31, 45, 57, 61, 75, 76, 77, 78, 79], [45, 60, 43, 30, 31, 61, 59, 32, 42, 46, 58, 62, 76, 77, 78, 79, 80], [46, 61, 44, 31, 32, 62, 60, 30, 21, 33, 43, 47, 59, 63, 77, 78, 79, 80, 81], [47, 62, 45, 32, 33, 63, 61, 31, 21, 22, 30, 34, 44, 48, 60, 64, 78, 79, 80, 81, 82], [48, 63, 46, 33, 34, 64, 62, 32, 21, 22, 23, 31, 35, 45, 49, 61, 65, 79, 80, 81, 82, 83], [49, 64, 47, 34, 35, 65, 63, 33, 21, 22, 23, 24, 32, 36, 46, 50, 62, 66, 80, 81, 82, 83, 84], [50, 65, 48, 35, 36, 66, 64, 34, 21, 22, 23, 24, 25, 33, 37, 47, 51, 63, 67, 81, 82, 83, 84, 85], [51, 66, 49, 36, 37, 67, 65, 35, 22, 23, 24, 25, 26, 34, 38, 48, 52, 64, 68, 82, 83, 84, 85], [52, 67, 50, 37, 38, 68, 66, 36, 23, 24, 25, 26, 27, 35, 39, 49, 53, 65, 69, 83, 84, 85], [53, 68, 51, 38, 39, 69, 67, 37, 24, 25, 26, 27, 28, 36, 40, 50, 54, 66, 84, 85], [54, 69, 52, 39, 40, 68, 38, 25, 26, 27, 28, 29, 37, 41, 51, 67, 85], [53, 40, 41, 69, 39, 26, 27, 28, 29, 38, 52, 68], [56, 73, 74, 72, 57, 71, 75, 90, 91, 92, 93, 94], [57, 74, 55, 75, 73, 42, 58, 72, 76, 91, 92, 93, 94, 95], [58, 75, 56, 42, 76, 74, 43, 55, 59, 73, 77, 92, 93, 94, 95, 96], [59, 76, 57, 42, 43, 77, 75, 30, 44, 56, 60, 74, 78, 93, 94, 95, 96, 97], [60, 77, 58, 43, 44, 78, 76, 42, 30, 31, 45, 57, 61, 75, 79, 94, 95, 96, 97, 98], [61, 78, 59, 44, 45, 79, 77, 43, 30, 31, 32, 42, 46, 58, 62, 76, 80, 95, 96, 97, 98, 99], [62, 79, 60, 45, 46, 80, 78, 44, 30, 31, 32, 33, 43, 47, 59, 63, 77, 81, 96, 97, 98, 99, 100], [63, 80, 61, 46, 47, 81, 79, 45, 30, 31, 32, 33, 34, 44, 48, 60, 64, 78, 82, 97, 98, 99, 100, 101], [64, 81, 62, 47, 48, 82, 80, 46, 31, 32, 33, 34, 35, 45, 49, 61, 65, 79, 83, 98, 99, 100, 101, 102], [65, 82, 63, 48, 49, 83, 81, 47, 32, 33, 34, 35, 36, 46, 50, 62, 66, 80, 84, 99, 100, 101, 102], [66, 83, 64, 49, 50, 84, 82, 48, 33, 34, 35, 36, 37, 47, 51, 63, 67, 81, 85, 100, 101, 102], [67, 84, 65, 50, 51, 85, 83, 49, 34, 35, 36, 37, 38, 48, 52, 64, 68, 82, 101, 102], [68, 85, 66, 51, 52, 84, 50, 35, 36, 37, 38, 39, 49, 53, 65, 69, 83, 102], [69, 67, 52, 53, 85, 51, 36, 37, 38, 39, 40, 50, 54, 66, 84], [68, 53, 54, 52, 37, 38, 39, 40, 41, 51, 67, 85], [71, 89, 90, 88, 72, 87, 91, 106, 107, 108, 109, 110], [72, 90, 70, 91, 89, 55, 73, 88, 92, 107, 108, 109, 110, 111], [73, 91, 71, 55, 92, 90, 56, 70, 74, 89, 93, 108, 109, 110, 111, 112], [74, 92, 72, 55, 56, 93, 91, 57, 71, 75, 90, 94, 109, 110, 111, 112, 113], [75, 93, 73, 56, 57, 94, 92, 55, 42, 58, 72, 76, 91, 95, 110, 111, 112, 113, 114], [76, 94, 74, 57, 58, 95, 93, 56, 42, 43, 55, 59, 73, 77, 92, 96, 111, 112, 113, 114, 115], [77, 95, 75, 58, 59, 96, 94, 57, 42, 43, 44, 56, 60, 74, 78, 93, 97, 112, 113, 114, 115, 116], [78, 96, 76, 59, 60, 97, 95, 58, 42, 43, 44, 45, 57, 61, 75, 79, 94, 98, 113, 114, 115, 116, 117], [79, 97, 77, 60, 61, 98, 96, 59, 42, 43, 44, 45, 46, 58, 62, 76, 80, 95, 99, 114, 115, 116, 117, 118], [80, 98, 78, 61, 62, 99, 97, 60, 43, 44, 45, 46, 47, 59, 63, 77, 81, 96, 100, 115, 116, 117, 118, 119], [81, 99, 79, 62, 63, 100, 98, 61, 44, 45, 46, 47, 48, 60, 64, 78, 82, 97, 101, 116, 117, 118, 119, 120], [82, 100, 80, 63, 64, 101, 99, 62, 45, 46, 47, 48, 49, 61, 65, 79, 83, 98, 102, 117, 118, 119, 120], [83, 101, 81, 64, 65, 102, 100, 63, 46, 47, 48, 49, 50, 62, 66, 80, 84, 99, 118, 119, 120], [84, 102, 82, 65, 66, 101, 64, 47, 48, 49, 50, 51, 63, 67, 81, 85, 100, 119, 120], [85, 83, 66, 67, 102, 65, 48, 49, 50, 51, 52, 64, 68, 82, 101, 120], [84, 67, 68, 66, 49, 50, 51, 52, 53, 65, 69, 83, 102], [87, 105, 106, 104, 88, 103, 107, 126, 127, 128, 129, 130], [88, 106, 86, 107, 105, 70, 89, 104, 108, 127, 128, 129, 130, 131], [89, 107, 87, 70, 108, 106, 71, 86, 90, 105, 109, 128, 129, 130, 131, 132], [90, 108, 88, 70, 71, 109, 107, 72, 87, 91, 106, 110, 129, 130, 131, 132, 133], [91, 109, 89, 71, 72, 110, 108, 70, 55, 73, 88, 92, 107, 111, 130, 131, 132, 133, 134], [92, 110, 90, 72, 73, 111, 109, 71, 55, 56, 70, 74, 89, 93, 108, 112, 131, 132, 133, 134, 135], [93, 111, 91, 73, 74, 112, 110, 72, 55, 56, 57, 71, 75, 90, 94, 109, 113, 132, 133, 134, 135, 136], [94, 112, 92, 74, 75, 113, 111, 73, 55, 56, 57, 58, 72, 76, 91, 95, 110, 114, 133, 134, 135, 136, 137], [95, 113, 93, 75, 76, 114, 112, 74, 55, 56, 57, 58, 59, 73, 77, 92, 96, 111, 115, 134, 135, 136, 137, 138], [96, 114, 94, 76, 77, 115, 113, 75, 56, 57, 58, 59, 60, 74, 78, 93, 97, 112, 116, 135, 136, 137, 138, 139], [97, 115, 95, 77, 78, 116, 114, 76, 57, 58, 59, 60, 61, 75, 79, 94, 98, 113, 117, 136, 137, 138, 139, 140], [98, 116, 96, 78, 79, 117, 115, 77, 58, 59, 60, 61, 62, 76, 80, 95, 99, 114, 118, 137, 138, 139, 140, 141], [99, 117, 97, 79, 80, 118, 116, 78, 59, 60, 61, 62, 63, 77, 81, 96, 100, 115, 119, 138, 139, 140, 141], [100, 118, 98, 80, 81, 119, 117, 79, 60, 61, 62, 63, 64, 78, 82, 97, 101, 116, 120, 139, 140, 141], [101, 119, 99, 81, 82, 120, 118, 80, 61, 62, 63, 64, 65, 79, 83, 98, 102, 117, 140, 141], [102, 120, 100, 82, 83, 119, 81, 62, 63, 64, 65, 66, 80, 84, 99, 118, 141], [101, 83, 84, 120, 82, 63, 64, 65, 66, 67, 81, 85, 100, 119], [104, 126, 127, 125, 86, 105, 124, 128, 149, 150, 151, 152, 153], [105, 127, 103, 86, 128, 126, 87, 106, 125, 129, 150, 151, 152, 153, 154], [106, 128, 104, 86, 87, 129, 127, 88, 103, 107, 126, 130, 151, 152, 153, 154, 155], [107, 129, 105, 87, 88, 130, 128, 86, 70, 89, 104, 108, 127, 131, 152, 153, 154, 155, 156], [108, 130, 106, 88, 89, 131, 129, 87, 70, 71, 86, 90, 105, 109, 128, 132, 153, 154, 155, 156, 157], [109, 131, 107, 89, 90, 132, 130, 88, 70, 71, 72, 87, 91, 106, 110, 129, 133, 154, 155, 156, 157, 158], [110, 132, 108, 90, 91, 133, 131, 89, 70, 71, 72, 73, 88, 92, 107, 111, 130, 134, 155, 156, 157, 158, 159], [111, 133, 109, 91, 92, 134, 132, 90, 70, 71, 72, 73, 74, 89, 93, 108, 112, 131, 135, 156, 157, 158, 159, 160], [112, 134, 110, 92, 93, 135, 133, 91, 71, 72, 73, 74, 75, 90, 94, 109, 113, 132, 136, 157, 158, 159, 160, 161], [113, 135, 111, 93, 94, 136, 134, 92, 72, 73, 74, 75, 76, 91, 95, 110, 114, 133, 137, 158, 159, 160, 161, 162], [114, 136, 112, 94, 95, 137, 135, 93, 73, 74, 75, 76, 77, 92, 96, 111, 115, 134, 138, 159, 160, 161, 162, 163], [115, 137, 113, 95, 96, 138, 136, 94, 74, 75, 76, 77, 78, 93, 97, 112, 116, 135, 139, 160, 161, 162, 163], [116, 138, 114, 96, 97, 139, 137, 95, 75, 76, 77, 78, 79, 94, 98, 113, 117, 136, 140, 161, 162, 163], [117, 139, 115, 97, 98, 140, 138, 96, 76, 77, 78, 79, 80, 95, 99, 114, 118, 137, 141, 162, 163], [118, 140, 116, 98, 99, 141, 139, 97, 77, 78, 79, 80, 81, 96, 100, 115, 119, 138, 163], [119, 141, 117, 99, 100, 140, 98, 78, 79, 80, 81, 82, 97, 101, 116, 120, 139], [120, 118, 100, 101, 141, 99, 79, 80, 81, 82, 83, 98, 102, 117, 140], [119, 101, 102, 100, 80, 81, 82, 83, 84, 99, 118, 141], [122, 146, 147, 145, 123, 144, 148, 169, 170, 171, 172, 173], [123, 147, 121, 148, 146, 124, 145, 149, 170, 171, 172, 173, 174], [124, 148, 122, 149, 147, 121, 125, 146, 150, 171, 172, 173, 174, 175], [125, 149, 123, 150, 148, 103, 122, 126, 147, 151, 172, 173, 174, 175, 176], [126, 150, 124, 103, 151, 149, 104, 123, 127, 148, 152, 173, 174, 175, 176, 177], [127, 151, 125, 103, 104, 152, 150, 86, 105, 124, 128, 149, 153, 174, 175, 176, 177, 178], [128, 152, 126, 104, 105, 153, 151, 103, 86, 87, 106, 125, 129, 150, 154, 175, 176, 177, 178, 179], [129, 153, 127, 105, 106, 154, 152, 104, 86, 87, 88, 103, 107, 126, 130, 151, 155, 176, 177, 178, 179, 180], [130, 154, 128, 106, 107, 155, 153, 105, 86, 87, 88, 89, 104, 108, 127, 131, 152, 156, 177, 178, 179, 180, 181], [131, 155, 129, 107, 108, 156, 154, 106, 86, 87, 88, 89, 90, 105, 109, 128, 132, 153, 157, 178, 179, 180, 181, 182], [132, 156, 130, 108, 109, 157, 155, 107, 87, 88, 89, 90, 91, 106, 110, 129, 133, 154, 158, 179, 180, 181, 182, 183], [133, 157, 131, 109, 110, 158, 156, 108, 88, 89, 90, 91, 92, 107, 111, 130, 134, 155, 159, 180, 181, 182, 183, 184], [134, 158, 132, 110, 111, 159, 157, 109, 89, 90, 91, 92, 93, 108, 112, 131, 135, 156, 160, 181, 182, 183, 184, 185], [135, 159, 133, 111, 112, 160, 158, 110, 90, 91, 92, 93, 94, 109, 113, 132, 136, 157, 161, 182, 183, 184, 185, 186], [136, 160, 134, 112, 113, 161, 159, 111, 91, 92, 93, 94, 95, 110, 114, 133, 137, 158, 162, 183, 184, 185, 186, 187], [137, 161, 135, 113, 114, 162, 160, 112, 92, 93, 94, 95, 96, 111, 115, 134, 138, 159, 163, 184, 185, 186, 187], [138, 162, 136, 114, 115, 163, 161, 113, 93, 94, 95, 96, 97, 112, 116, 135, 139, 160, 185, 186, 187], [139, 163, 137, 115, 116, 162, 114, 94, 95, 96, 97, 98, 113, 117, 136, 140, 161, 186, 187], [140, 138, 116, 117, 163, 115, 95, 96, 97, 98, 99, 114, 118, 137, 141, 162, 187], [141, 139, 117, 118, 116, 96, 97, 98, 99, 100, 115, 119, 138, 163], [140, 118, 119, 117, 97, 98, 99, 100, 101, 116, 120, 139], [143, 167, 168, 166, 144, 165, 169, 193, 194, 195, 196, 197], [144, 168, 142, 169, 167, 145, 166, 170, 194, 195, 196, 197, 198], [145, 169, 143, 170, 168, 121, 142, 146, 167, 171, 195, 196, 197, 198, 199], [146, 170, 144, 121, 171, 169, 122, 143, 147, 168, 172, 196, 197, 198, 199, 200], [147, 171, 145, 121, 122, 172, 170, 123, 144, 148, 169, 173, 197, 198, 199, 200, 201], [148, 172, 146, 122, 123, 173, 171, 121, 124, 145, 149, 170, 174, 198, 199, 200, 201, 202], [149, 173, 147, 123, 124, 174, 172, 122, 121, 125, 146, 150, 171, 175, 199, 200, 201, 202, 203], [150, 174, 148, 124, 125, 175, 173, 123, 103, 122, 126, 147, 151, 172, 176, 200, 201, 202, 203, 204], [151, 175, 149, 125, 126, 176, 174, 124, 103, 104, 123, 127, 148, 152, 173, 177, 201, 202, 203, 204, 205], [152, 176, 150, 126, 127, 177, 175, 125, 103, 104, 105, 124, 128, 149, 153, 174, 178, 202, 203, 204, 205, 206], [153, 177, 151, 127, 128, 178, 176, 126, 103, 104, 105, 106, 125, 129, 150, 154, 175, 179, 203, 204, 205, 206, 207], [154, 178, 152, 128, 129, 179, 177, 127, 103, 104, 105, 106, 107, 126, 130, 151, 155, 176, 180, 204, 205, 206, 207, 208], [155, 179, 153, 129, 130, 180, 178, 128, 104, 105, 106, 107, 108, 127, 131, 152, 156, 177, 181, 205, 206, 207, 208, 209], [156, 180, 154, 130, 131, 181, 179, 129, 105, 106, 107, 108, 109, 128, 132, 153, 157, 178, 182, 206, 207, 208, 209, 210], [157, 181, 155, 131, 132, 182, 180, 130, 106, 107, 108, 109, 110, 129, 133, 154, 158, 179, 183, 207, 208, 209, 210, 211], [158, 182, 156, 132, 133, 183, 181, 131, 107, 108, 109, 110, 111, 130, 134, 155, 159, 180, 184, 208, 209, 210, 211, 212], [159, 183, 157, 133, 134, 184, 182, 132, 108, 109, 110, 111, 112, 131, 135, 156, 160, 181, 185, 209, 210, 211, 212, 213], [160, 184, 158, 134, 135, 185, 183, 133, 109, 110, 111, 112, 113, 132, 136, 157, 161, 182, 186, 210, 211, 212, 213], [161, 185, 159, 135, 136, 186, 184, 134, 110, 111, 112, 113, 114, 133, 137, 158, 162, 183, 187, 211, 212, 213], [162, 186, 160, 136, 137, 187, 185, 135, 111, 112, 113, 114, 115, 134, 138, 159, 163, 184, 212, 213], [163, 187, 161, 137, 138, 186, 136, 112, 113, 114, 115, 116, 135, 139, 160, 185, 213], [162, 138, 139, 187, 137, 113, 114, 115, 116, 117, 136, 140, 161, 186], [165, 192, 193, 191, 166, 190, 194, 214, 215, 216, 217], [166, 193, 164, 194, 192, 142, 167, 191, 195, 214, 215, 216, 217, 218], [167, 194, 165, 142, 195, 193, 143, 164, 168, 192, 196, 215, 216, 217, 218, 219], [168, 195, 166, 142, 143, 196, 194, 144, 165, 169, 193, 197, 216, 217, 218, 219, 220], [169, 196, 167, 143, 144, 197, 195, 142, 145, 166, 170, 194, 198, 217, 218, 219, 220, 221], [170, 197, 168, 144, 145, 198, 196, 143, 121, 142, 146, 167, 171, 195, 199, 218, 219, 220, 221, 222], [171, 198, 169, 145, 146, 199, 197, 144, 121, 122, 143, 147, 168, 172, 196, 200, 219, 220, 221, 222, 223], [172, 199, 170, 146, 147, 200, 198, 145, 121, 122, 123, 144, 148, 169, 173, 197, 201, 220, 221, 222, 223, 224], [173, 200, 171, 147, 148, 201, 199, 146, 121, 122, 123, 124, 145, 149, 170, 174, 198, 202, 221, 222, 223, 224, 225], [174, 201, 172, 148, 149, 202, 200, 147, 121, 122, 123, 124, 125, 146, 150, 171, 175, 199, 203, 222, 223, 224, 225, 226], [175, 202, 173, 149, 150, 203, 201, 148, 122, 123, 124, 125, 126, 147, 151, 172, 176, 200, 204, 223, 224, 225, 226, 227], [176, 203, 174, 150, 151, 204, 202, 149, 123, 124, 125, 126, 127, 148, 152, 173, 177, 201, 205, 224, 225, 226, 227, 228], [177, 204, 175, 151, 152, 205, 203, 150, 124, 125, 126, 127, 128, 149, 153, 174, 178, 202, 206, 225, 226, 227, 228, 229], [178, 205, 176, 152, 153, 206, 204, 151, 125, 126, 127, 128, 129, 150, 154, 175, 179, 203, 207, 226, 227, 228, 229, 230], [179, 206, 177, 153, 154, 207, 205, 152, 126, 127, 128, 129, 130, 151, 155, 176, 180, 204, 208, 227, 228, 229, 230, 231], [180, 207, 178, 154, 155, 208, 206, 153, 127, 128, 129, 130, 131, 152, 156, 177, 181, 205, 209, 228, 229, 230, 231], [181, 208, 179, 155, 156, 209, 207, 154, 128, 129, 130, 131, 132, 153, 157, 178, 182, 206, 210, 229, 230, 231], [182, 209, 180, 156, 157, 210, 208, 155, 129, 130, 131, 132, 133, 154, 158, 179, 183, 207, 211, 230, 231], [183, 210, 181, 157, 158, 211, 209, 156, 130, 131, 132, 133, 134, 155, 159, 180, 184, 208, 212, 231], [184, 211, 182, 158, 159, 212, 210, 157, 131, 132, 133, 134, 135, 156, 160, 181, 185, 209, 213], [185, 212, 183, 159, 160, 213, 211, 158, 132, 133, 134, 135, 136, 157, 161, 182, 186, 210], [186, 213, 184, 160, 161, 212, 159, 133, 134, 135, 136, 137, 158, 162, 183, 187, 211], [187, 185, 161, 162, 213, 160, 134, 135, 136, 137, 138, 159, 163, 184, 212], [186, 162, 163, 161, 135, 136, 137, 138, 139, 160, 185, 213], [189, 190], [190, 188, 191, 214], [191, 189, 214, 164, 188, 192, 215, 232], [192, 214, 190, 164, 215, 165, 189, 193, 216, 232, 233], [193, 215, 191, 164, 165, 216, 214, 166, 190, 194, 217, 232, 233, 234], [194, 216, 192, 165, 166, 217, 215, 164, 142, 167, 191, 195, 214, 218, 232, 233, 234, 235], [195, 217, 193, 166, 167, 218, 216, 165, 142, 143, 164, 168, 192, 196, 215, 219, 232, 233, 234, 235, 236], [196, 218, 194, 167, 168, 219, 217, 166, 142, 143, 144, 165, 169, 193, 197, 216, 220, 233, 234, 235, 236, 237], [197, 219, 195, 168, 169, 220, 218, 167, 142, 143, 144, 145, 166, 170, 194, 198, 217, 221, 234, 235, 236, 237, 238], [198, 220, 196, 169, 170, 221, 219, 168, 142, 143, 144, 145, 146, 167, 171, 195, 199, 218, 222, 235, 236, 237, 238, 239], [199, 221, 197, 170, 171, 222, 220, 169, 143, 144, 145, 146, 147, 168, 172, 196, 200, 219, 223, 236, 237, 238, 239, 240], [200, 222, 198, 171, 172, 223, 221, 170, 144, 145, 146, 147, 148, 169, 173, 197, 201, 220, 224, 237, 238, 239, 240, 241], [201, 223, 199, 172, 173, 224, 222, 171, 145, 146, 147, 148, 149, 170, 174, 198, 202, 221, 225, 238, 239, 240, 241, 242], [202, 224, 200, 173, 174, 225, 223, 172, 146, 147, 148, 149, 150, 171, 175, 199, 203, 222, 226, 239, 240, 241, 242, 243], [203, 225, 201, 174, 175, 226, 224, 173, 147, 148, 149, 150, 151, 172, 176, 200, 204, 223, 227, 240, 241, 242, 243, 244], [204, 226, 202, 175, 176, 227, 225, 174, 148, 149, 150, 151, 152, 173, 177, 201, 205, 224, 228, 241, 242, 243, 244, 245], [205, 227, 203, 176, 177, 228, 226, 175, 149, 150, 151, 152, 153, 174, 178, 202, 206, 225, 229, 242, 243, 244, 245], [206, 228, 204, 177, 178, 229, 227, 176, 150, 151, 152, 153, 154, 175, 179, 203, 207, 226, 230, 243, 244, 245], [207, 229, 205, 178, 179, 230, 228, 177, 151, 152, 153, 154, 155, 176, 180, 204, 208, 227, 231, 244, 245], [208, 230, 206, 179, 180, 231, 229, 178, 152, 153, 154, 155, 156, 177, 181, 205, 209, 228, 245], [209, 231, 207, 180, 181, 230, 179, 153, 154, 155, 156, 157, 178, 182, 206, 210, 229], [210, 208, 181, 182, 231, 180, 154, 155, 156, 157, 158, 179, 183, 207, 211, 230], [211, 209, 182, 183, 181, 155, 156, 157, 158, 159, 180, 184, 208, 212, 231], [212, 210, 183, 184, 182, 156, 157, 158, 159, 160, 181, 185, 209, 213], [213, 211, 184, 185, 183, 157, 158, 159, 160, 161, 182, 186, 210], [212, 185, 186, 184, 158, 159, 160, 161, 162, 183, 187, 211], [215, 191, 192, 232, 190, 164, 165, 189, 193, 216, 233], [216, 232, 214, 192, 193, 233, 191, 164, 165, 166, 190, 194, 217, 234, 246], [217, 233, 215, 193, 194, 234, 232, 192, 164, 165, 166, 167, 191, 195, 214, 218, 235, 246, 247], [218, 234, 216, 194, 195, 235, 233, 193, 164, 165, 166, 167, 168, 192, 196, 215, 219, 232, 236, 246, 247, 248], [219, 235, 217, 195, 196, 236, 234, 194, 165, 166, 167, 168, 169, 193, 197, 216, 220, 233, 237, 246, 247, 248, 249], [220, 236, 218, 196, 197, 237, 235, 195, 166, 167, 168, 169, 170, 194, 198, 217, 221, 234, 238, 246, 247, 248, 249, 250], [221, 237, 219, 197, 198, 238, 236, 196, 167, 168, 169, 170, 171, 195, 199, 218, 222, 235, 239, 247, 248, 249, 250, 251], [222, 238, 220, 198, 199, 239, 237, 197, 168, 169, 170, 171, 172, 196, 200, 219, 223, 236, 240, 248, 249, 250, 251, 252], [223, 239, 221, 199, 200, 240, 238, 198, 169, 170, 171, 172, 173, 197, 201, 220, 224, 237, 241, 249, 250, 251, 252, 253], [224, 240, 222, 200, 201, 241, 239, 199, 170, 171, 172, 173, 174, 198, 202, 221, 225, 238, 242, 250, 251, 252, 253, 254], [225, 241, 223, 201, 202, 242, 240, 200, 171, 172, 173, 174, 175, 199, 203, 222, 226, 239, 243, 251, 252, 253, 254, 255], [226, 242, 224, 202, 203, 243, 241, 201, 172, 173, 174, 175, 176, 200, 204, 223, 227, 240, 244, 252, 253, 254, 255], [227, 243, 225, 203, 204, 244, 242, 202, 173, 174, 175, 176, 177, 201, 205, 224, 228, 241, 245, 253, 254, 255], [228, 244, 226, 204, 205, 245, 243, 203, 174, 175, 176, 177, 178, 202, 206, 225, 229, 242, 254, 255], [229, 245, 227, 205, 206, 244, 204, 175, 176, 177, 178, 179, 203, 207, 226, 230, 243, 255], [230, 228, 206, 207, 245, 205, 176, 177, 178, 179, 180, 204, 208, 227, 231, 244], [231, 229, 207, 208, 206, 177, 178, 179, 180, 181, 205, 209, 228, 245], [230, 208, 209, 207, 178, 179, 180, 181, 182, 206, 210, 229], [233, 215, 216, 214, 190, 191, 192, 193, 194, 217, 234, 246], [234, 232, 216, 217, 246, 215, 191, 192, 193, 194, 195, 214, 218, 235, 247, 256], [235, 246, 233, 217, 218, 247, 216, 192, 193, 194, 195, 196, 215, 219, 232, 236, 248, 256, 257], [236, 247, 234, 218, 219, 248, 246, 217, 193, 194, 195, 196, 197, 216, 220, 233, 237, 249, 256, 257, 258], [237, 248, 235, 219, 220, 249, 247, 218, 194, 195, 196, 197, 198, 217, 221, 234, 238, 246, 250, 256, 257, 258, 259], [238, 249, 236, 220, 221, 250, 248, 219, 195, 196, 197, 198, 199, 218, 222, 235, 239, 247, 251, 256, 257, 258, 259, 260], [239, 250, 237, 221, 222, 251, 249, 220, 196, 197, 198, 199, 200, 219, 223, 236, 240, 248, 252, 257, 258, 259, 260, 261], [240, 251, 238, 222, 223, 252, 250, 221, 197, 198, 199, 200, 201, 220, 224, 237, 241, 249, 253, 258, 259, 260, 261, 262], [241, 252, 239, 223, 224, 253, 251, 222, 198, 199, 200, 201, 202, 221, 225, 238, 242, 250, 254, 259, 260, 261, 262], [242, 253, 240, 224, 225, 254, 252, 223, 199, 200, 201, 202, 203, 222, 226, 239, 243, 251, 255, 260, 261, 262], [243, 254, 241, 225, 226, 255, 253, 224, 200, 201, 202, 203, 204, 223, 227, 240, 244, 252, 261, 262], [244, 255, 242, 226, 227, 254, 225, 201, 202, 203, 204, 205, 224, 228, 241, 245, 253, 262], [245, 243, 227, 228, 255, 226, 202, 203, 204, 205, 206, 225, 229, 242, 254], [244, 228, 229, 227, 203, 204, 205, 206, 207, 226, 230, 243, 255], [247, 234, 235, 256, 233, 215, 216, 217, 218, 219, 232, 236, 248, 257, 263], [248, 256, 246, 235, 236, 257, 234, 216, 217, 218, 219, 220, 233, 237, 249, 258, 263, 264], [249, 257, 247, 236, 237, 258, 256, 235, 217, 218, 219, 220, 221, 234, 238, 246, 250, 259, 263, 264, 265], [250, 258, 248, 237, 238, 259, 257, 236, 218, 219, 220, 221, 222, 235, 239, 247, 251, 256, 260, 263, 264, 265, 266], [251, 259, 249, 238, 239, 260, 258, 237, 219, 220, 221, 222, 223, 236, 240, 248, 252, 257, 261, 263, 264, 265, 266], [252, 260, 250, 239, 240, 261, 259, 238, 220, 221, 222, 223, 224, 237, 241, 249, 253, 258, 262, 264, 265, 266], [253, 261, 251, 240, 241, 262, 260, 239, 221, 222, 223, 224, 225, 238, 242, 250, 254, 259, 265, 266], [254, 262, 252, 241, 242, 261, 240, 222, 223, 224, 225, 226, 239, 243, 251, 255, 260, 266], [255, 253, 242, 243, 262, 241, 223, 224, 225, 226, 227, 240, 244, 252, 261], [254, 243, 244, 242, 224, 225, 226, 227, 228, 241, 245, 253, 262], [257, 247, 248, 263, 246, 233, 234, 235, 236, 237, 249, 258, 264], [258, 263, 256, 248, 249, 264, 247, 234, 235, 236, 237, 238, 246, 250, 259, 265], [259, 264, 257, 249, 250, 265, 263, 248, 235, 236, 237, 238, 239, 247, 251, 256, 260, 266], [260, 265, 258, 250, 251, 266, 264, 249, 236, 237, 238, 239, 240, 248, 252, 257, 261, 263], [261, 266, 259, 251, 252, 265, 250, 237, 238, 239, 240, 241, 249, 253, 258, 262, 264], [262, 260, 252, 253, 266, 251, 238, 239, 240, 241, 242, 250, 254, 259, 265], [261, 253, 254, 252, 239, 240, 241, 242, 243, 251, 255, 260, 266], [264, 257, 258, 256, 246, 247, 248, 249, 250, 259, 265], [265, 263, 258, 259, 257, 247, 248, 249, 250, 251, 256, 260, 266], [266, 264, 259, 260, 258, 248, 249, 250, 251, 252, 257, 261, 263], [265, 260, 261, 259, 249, 250, 251, 252, 253, 258, 262, 264]]
from random import shuffle
Column_Numbers2 = list(np.arange(1,TotalNumbcol+1,1))
Chosen_Columns2 = []
shuffle(Column_Numbers2)
rand = Column_Numbers2.pop()
Chosen_Columns2.append(rand)
while Column_Numbers2:
for i in range(rand-1,rand):
rand = NeighborsperColumn[i]
rand = [x for x in rand if x not in Chosen_Columns2]
shuffle(rand)
try:
rand = rand.pop()
Chosen_Columns2.append(rand)
Column_Numbers2.remove(rand)
except IndexError:
rand = Column_Numbers2.pop()
Chosen_Columns2.append(rand)
print Column_Numbers2
print Chosen_Columns2
END_CLOCK = datetime.now()
DELTA_TIME = END_CLOCK - START_CLOCK
print DELTA_TIME
Time measured is usually around 0.018 sec (on my computer that is).
NeighborsperColumn represents all neighbors that are allowed to be chosen next after a certain column. Their index corresponds to the number from Column_Numbers2 -1.
Now I wonder if there is a possibility to speed this up by doing some things in a different way. The results should be a sequence of all column numbers from Column_Numbers2 (numbers 1 to 266 in this case). This script does work, but I have to do many iterations with it so I'm wondering if there's a way to save some time.
Thanks
Thank you for the working example. This allowed my to help you. Here is some code. The basic idea is to replace:
shuffle(Column_Numbers2)
with
Column_Numbers2 = np.random.permutation(Column_Numbers2).tolist()
This makes your code about 3 times faster:
from datetime import datetime
import numpy as np
from random import shuffle
START_CLOCK = datetime.now()
TotalNumbcol = 266
NeighborsperColumn = [[3, 2, 5, 6, 7], [3, 6, 1, 7, 5, 4, 10, 11, 12, 13], [7, 2, 1, 6, 5, 11, 12, 13], [5, 10, 11, 9, 2, 6, 8, 12, 16, 17, 18, 19, 20], [6, 11, 4, 2, 12, 10, 1, 3, 7, 9, 13, 17, 18, 19, 20], [7, 12, 5, 2, 3, 13, 11, 1, 4, 10, 18, 19, 20], [13, 6, 3, 12, 2, 1, 5, 11, 19, 20], [9, 16, 17, 15, 4, 10, 14, 18, 24, 25, 26, 27, 28], [10, 17, 8, 4, 18, 16, 5, 11, 15, 19, 25, 26, 27, 28, 29], [11, 18, 9, 4, 5, 19, 17, 2, 6, 8, 12, 16, 20, 26, 27, 28, 29], [12, 19, 10, 5, 6, 20, 18, 4, 2, 3, 7, 9, 13, 17, 27, 28, 29], [13, 20, 11, 6, 7, 19, 5, 2, 3, 4, 10, 18, 28, 29], [12, 7, 20, 6, 2, 3, 5, 11, 19, 29], [15, 24, 25, 23, 8, 16, 22, 26, 34, 35, 36, 37, 38], [16, 25, 14, 8, 26, 24, 9, 17, 23, 27, 35, 36, 37, 38, 39], [17, 26, 15, 8, 9, 27, 25, 4, 10, 14, 18, 24, 28, 36, 37, 38, 39, 40], [18, 27, 16, 9, 10, 28, 26, 8, 4, 5, 11, 15, 19, 25, 29, 37, 38, 39, 40, 41], [19, 28, 17, 10, 11, 29, 27, 9, 4, 5, 6, 8, 12, 16, 20, 26, 38, 39, 40, 41], [20, 29, 18, 11, 12, 28, 10, 4, 5, 6, 7, 9, 13, 17, 27, 39, 40, 41], [19, 12, 13, 29, 11, 4, 5, 6, 7, 10, 18, 28, 40, 41], [22, 33, 34, 32, 23, 31, 35, 45, 46, 47, 48, 49], [23, 34, 21, 35, 33, 14, 24, 32, 36, 46, 47, 48, 49, 50], [24, 35, 22, 14, 36, 34, 15, 21, 25, 33, 37, 47, 48, 49, 50, 51], [25, 36, 23, 14, 15, 37, 35, 8, 16, 22, 26, 34, 38, 48, 49, 50, 51, 52], [26, 37, 24, 15, 16, 38, 36, 14, 8, 9, 17, 23, 27, 35, 39, 49, 50, 51, 52, 53], [27, 38, 25, 16, 17, 39, 37, 15, 8, 9, 10, 14, 18, 24, 28, 36, 40, 50, 51, 52, 53, 54], [28, 39, 26, 17, 18, 40, 38, 16, 8, 9, 10, 11, 15, 19, 25, 29, 37, 41, 51, 52, 53, 54], [29, 40, 27, 18, 19, 41, 39, 17, 8, 9, 10, 11, 12, 16, 20, 26, 38, 52, 53, 54], [41, 28, 19, 20, 40, 18, 9, 10, 11, 12, 13, 17, 27, 39, 53, 54], [31, 44, 45, 43, 32, 42, 46, 58, 59, 60, 61, 62], [32, 45, 30, 46, 44, 21, 33, 43, 47, 59, 60, 61, 62, 63], [33, 46, 31, 21, 47, 45, 22, 30, 34, 44, 48, 60, 61, 62, 63, 64], [34, 47, 32, 21, 22, 48, 46, 23, 31, 35, 45, 49, 61, 62, 63, 64, 65], [35, 48, 33, 22, 23, 49, 47, 21, 14, 24, 32, 36, 46, 50, 62, 63, 64, 65, 66], [36, 49, 34, 23, 24, 50, 48, 22, 14, 15, 21, 25, 33, 37, 47, 51, 63, 64, 65, 66, 67], [37, 50, 35, 24, 25, 51, 49, 23, 14, 15, 16, 22, 26, 34, 38, 48, 52, 64, 65, 66, 67, 68], [38, 51, 36, 25, 26, 52, 50, 24, 14, 15, 16, 17, 23, 27, 35, 39, 49, 53, 65, 66, 67, 68, 69], [39, 52, 37, 26, 27, 53, 51, 25, 14, 15, 16, 17, 18, 24, 28, 36, 40, 50, 54, 66, 67, 68, 69], [40, 53, 38, 27, 28, 54, 52, 26, 15, 16, 17, 18, 19, 25, 29, 37, 41, 51, 67, 68, 69], [41, 54, 39, 28, 29, 53, 27, 16, 17, 18, 19, 20, 26, 38, 52, 68, 69], [40, 29, 54, 28, 17, 18, 19, 20, 27, 39, 53, 69], [43, 58, 59, 57, 30, 44, 56, 60, 74, 75, 76, 77, 78], [44, 59, 42, 30, 60, 58, 31, 45, 57, 61, 75, 76, 77, 78, 79], [45, 60, 43, 30, 31, 61, 59, 32, 42, 46, 58, 62, 76, 77, 78, 79, 80], [46, 61, 44, 31, 32, 62, 60, 30, 21, 33, 43, 47, 59, 63, 77, 78, 79, 80, 81], [47, 62, 45, 32, 33, 63, 61, 31, 21, 22, 30, 34, 44, 48, 60, 64, 78, 79, 80, 81, 82], [48, 63, 46, 33, 34, 64, 62, 32, 21, 22, 23, 31, 35, 45, 49, 61, 65, 79, 80, 81, 82, 83], [49, 64, 47, 34, 35, 65, 63, 33, 21, 22, 23, 24, 32, 36, 46, 50, 62, 66, 80, 81, 82, 83, 84], [50, 65, 48, 35, 36, 66, 64, 34, 21, 22, 23, 24, 25, 33, 37, 47, 51, 63, 67, 81, 82, 83, 84, 85], [51, 66, 49, 36, 37, 67, 65, 35, 22, 23, 24, 25, 26, 34, 38, 48, 52, 64, 68, 82, 83, 84, 85], [52, 67, 50, 37, 38, 68, 66, 36, 23, 24, 25, 26, 27, 35, 39, 49, 53, 65, 69, 83, 84, 85], [53, 68, 51, 38, 39, 69, 67, 37, 24, 25, 26, 27, 28, 36, 40, 50, 54, 66, 84, 85], [54, 69, 52, 39, 40, 68, 38, 25, 26, 27, 28, 29, 37, 41, 51, 67, 85], [53, 40, 41, 69, 39, 26, 27, 28, 29, 38, 52, 68], [56, 73, 74, 72, 57, 71, 75, 90, 91, 92, 93, 94], [57, 74, 55, 75, 73, 42, 58, 72, 76, 91, 92, 93, 94, 95], [58, 75, 56, 42, 76, 74, 43, 55, 59, 73, 77, 92, 93, 94, 95, 96], [59, 76, 57, 42, 43, 77, 75, 30, 44, 56, 60, 74, 78, 93, 94, 95, 96, 97], [60, 77, 58, 43, 44, 78, 76, 42, 30, 31, 45, 57, 61, 75, 79, 94, 95, 96, 97, 98], [61, 78, 59, 44, 45, 79, 77, 43, 30, 31, 32, 42, 46, 58, 62, 76, 80, 95, 96, 97, 98, 99], [62, 79, 60, 45, 46, 80, 78, 44, 30, 31, 32, 33, 43, 47, 59, 63, 77, 81, 96, 97, 98, 99, 100], [63, 80, 61, 46, 47, 81, 79, 45, 30, 31, 32, 33, 34, 44, 48, 60, 64, 78, 82, 97, 98, 99, 100, 101], [64, 81, 62, 47, 48, 82, 80, 46, 31, 32, 33, 34, 35, 45, 49, 61, 65, 79, 83, 98, 99, 100, 101, 102], [65, 82, 63, 48, 49, 83, 81, 47, 32, 33, 34, 35, 36, 46, 50, 62, 66, 80, 84, 99, 100, 101, 102], [66, 83, 64, 49, 50, 84, 82, 48, 33, 34, 35, 36, 37, 47, 51, 63, 67, 81, 85, 100, 101, 102], [67, 84, 65, 50, 51, 85, 83, 49, 34, 35, 36, 37, 38, 48, 52, 64, 68, 82, 101, 102], [68, 85, 66, 51, 52, 84, 50, 35, 36, 37, 38, 39, 49, 53, 65, 69, 83, 102], [69, 67, 52, 53, 85, 51, 36, 37, 38, 39, 40, 50, 54, 66, 84], [68, 53, 54, 52, 37, 38, 39, 40, 41, 51, 67, 85], [71, 89, 90, 88, 72, 87, 91, 106, 107, 108, 109, 110], [72, 90, 70, 91, 89, 55, 73, 88, 92, 107, 108, 109, 110, 111], [73, 91, 71, 55, 92, 90, 56, 70, 74, 89, 93, 108, 109, 110, 111, 112], [74, 92, 72, 55, 56, 93, 91, 57, 71, 75, 90, 94, 109, 110, 111, 112, 113], [75, 93, 73, 56, 57, 94, 92, 55, 42, 58, 72, 76, 91, 95, 110, 111, 112, 113, 114], [76, 94, 74, 57, 58, 95, 93, 56, 42, 43, 55, 59, 73, 77, 92, 96, 111, 112, 113, 114, 115], [77, 95, 75, 58, 59, 96, 94, 57, 42, 43, 44, 56, 60, 74, 78, 93, 97, 112, 113, 114, 115, 116], [78, 96, 76, 59, 60, 97, 95, 58, 42, 43, 44, 45, 57, 61, 75, 79, 94, 98, 113, 114, 115, 116, 117], [79, 97, 77, 60, 61, 98, 96, 59, 42, 43, 44, 45, 46, 58, 62, 76, 80, 95, 99, 114, 115, 116, 117, 118], [80, 98, 78, 61, 62, 99, 97, 60, 43, 44, 45, 46, 47, 59, 63, 77, 81, 96, 100, 115, 116, 117, 118, 119], [81, 99, 79, 62, 63, 100, 98, 61, 44, 45, 46, 47, 48, 60, 64, 78, 82, 97, 101, 116, 117, 118, 119, 120], [82, 100, 80, 63, 64, 101, 99, 62, 45, 46, 47, 48, 49, 61, 65, 79, 83, 98, 102, 117, 118, 119, 120], [83, 101, 81, 64, 65, 102, 100, 63, 46, 47, 48, 49, 50, 62, 66, 80, 84, 99, 118, 119, 120], [84, 102, 82, 65, 66, 101, 64, 47, 48, 49, 50, 51, 63, 67, 81, 85, 100, 119, 120], [85, 83, 66, 67, 102, 65, 48, 49, 50, 51, 52, 64, 68, 82, 101, 120], [84, 67, 68, 66, 49, 50, 51, 52, 53, 65, 69, 83, 102], [87, 105, 106, 104, 88, 103, 107, 126, 127, 128, 129, 130], [88, 106, 86, 107, 105, 70, 89, 104, 108, 127, 128, 129, 130, 131], [89, 107, 87, 70, 108, 106, 71, 86, 90, 105, 109, 128, 129, 130, 131, 132], [90, 108, 88, 70, 71, 109, 107, 72, 87, 91, 106, 110, 129, 130, 131, 132, 133], [91, 109, 89, 71, 72, 110, 108, 70, 55, 73, 88, 92, 107, 111, 130, 131, 132, 133, 134], [92, 110, 90, 72, 73, 111, 109, 71, 55, 56, 70, 74, 89, 93, 108, 112, 131, 132, 133, 134, 135], [93, 111, 91, 73, 74, 112, 110, 72, 55, 56, 57, 71, 75, 90, 94, 109, 113, 132, 133, 134, 135, 136], [94, 112, 92, 74, 75, 113, 111, 73, 55, 56, 57, 58, 72, 76, 91, 95, 110, 114, 133, 134, 135, 136, 137], [95, 113, 93, 75, 76, 114, 112, 74, 55, 56, 57, 58, 59, 73, 77, 92, 96, 111, 115, 134, 135, 136, 137, 138], [96, 114, 94, 76, 77, 115, 113, 75, 56, 57, 58, 59, 60, 74, 78, 93, 97, 112, 116, 135, 136, 137, 138, 139], [97, 115, 95, 77, 78, 116, 114, 76, 57, 58, 59, 60, 61, 75, 79, 94, 98, 113, 117, 136, 137, 138, 139, 140], [98, 116, 96, 78, 79, 117, 115, 77, 58, 59, 60, 61, 62, 76, 80, 95, 99, 114, 118, 137, 138, 139, 140, 141], [99, 117, 97, 79, 80, 118, 116, 78, 59, 60, 61, 62, 63, 77, 81, 96, 100, 115, 119, 138, 139, 140, 141], [100, 118, 98, 80, 81, 119, 117, 79, 60, 61, 62, 63, 64, 78, 82, 97, 101, 116, 120, 139, 140, 141], [101, 119, 99, 81, 82, 120, 118, 80, 61, 62, 63, 64, 65, 79, 83, 98, 102, 117, 140, 141], [102, 120, 100, 82, 83, 119, 81, 62, 63, 64, 65, 66, 80, 84, 99, 118, 141], [101, 83, 84, 120, 82, 63, 64, 65, 66, 67, 81, 85, 100, 119], [104, 126, 127, 125, 86, 105, 124, 128, 149, 150, 151, 152, 153], [105, 127, 103, 86, 128, 126, 87, 106, 125, 129, 150, 151, 152, 153, 154], [106, 128, 104, 86, 87, 129, 127, 88, 103, 107, 126, 130, 151, 152, 153, 154, 155], [107, 129, 105, 87, 88, 130, 128, 86, 70, 89, 104, 108, 127, 131, 152, 153, 154, 155, 156], [108, 130, 106, 88, 89, 131, 129, 87, 70, 71, 86, 90, 105, 109, 128, 132, 153, 154, 155, 156, 157], [109, 131, 107, 89, 90, 132, 130, 88, 70, 71, 72, 87, 91, 106, 110, 129, 133, 154, 155, 156, 157, 158], [110, 132, 108, 90, 91, 133, 131, 89, 70, 71, 72, 73, 88, 92, 107, 111, 130, 134, 155, 156, 157, 158, 159], [111, 133, 109, 91, 92, 134, 132, 90, 70, 71, 72, 73, 74, 89, 93, 108, 112, 131, 135, 156, 157, 158, 159, 160], [112, 134, 110, 92, 93, 135, 133, 91, 71, 72, 73, 74, 75, 90, 94, 109, 113, 132, 136, 157, 158, 159, 160, 161], [113, 135, 111, 93, 94, 136, 134, 92, 72, 73, 74, 75, 76, 91, 95, 110, 114, 133, 137, 158, 159, 160, 161, 162], [114, 136, 112, 94, 95, 137, 135, 93, 73, 74, 75, 76, 77, 92, 96, 111, 115, 134, 138, 159, 160, 161, 162, 163], [115, 137, 113, 95, 96, 138, 136, 94, 74, 75, 76, 77, 78, 93, 97, 112, 116, 135, 139, 160, 161, 162, 163], [116, 138, 114, 96, 97, 139, 137, 95, 75, 76, 77, 78, 79, 94, 98, 113, 117, 136, 140, 161, 162, 163], [117, 139, 115, 97, 98, 140, 138, 96, 76, 77, 78, 79, 80, 95, 99, 114, 118, 137, 141, 162, 163], [118, 140, 116, 98, 99, 141, 139, 97, 77, 78, 79, 80, 81, 96, 100, 115, 119, 138, 163], [119, 141, 117, 99, 100, 140, 98, 78, 79, 80, 81, 82, 97, 101, 116, 120, 139], [120, 118, 100, 101, 141, 99, 79, 80, 81, 82, 83, 98, 102, 117, 140], [119, 101, 102, 100, 80, 81, 82, 83, 84, 99, 118, 141], [122, 146, 147, 145, 123, 144, 148, 169, 170, 171, 172, 173], [123, 147, 121, 148, 146, 124, 145, 149, 170, 171, 172, 173, 174], [124, 148, 122, 149, 147, 121, 125, 146, 150, 171, 172, 173, 174, 175], [125, 149, 123, 150, 148, 103, 122, 126, 147, 151, 172, 173, 174, 175, 176], [126, 150, 124, 103, 151, 149, 104, 123, 127, 148, 152, 173, 174, 175, 176, 177], [127, 151, 125, 103, 104, 152, 150, 86, 105, 124, 128, 149, 153, 174, 175, 176, 177, 178], [128, 152, 126, 104, 105, 153, 151, 103, 86, 87, 106, 125, 129, 150, 154, 175, 176, 177, 178, 179], [129, 153, 127, 105, 106, 154, 152, 104, 86, 87, 88, 103, 107, 126, 130, 151, 155, 176, 177, 178, 179, 180], [130, 154, 128, 106, 107, 155, 153, 105, 86, 87, 88, 89, 104, 108, 127, 131, 152, 156, 177, 178, 179, 180, 181], [131, 155, 129, 107, 108, 156, 154, 106, 86, 87, 88, 89, 90, 105, 109, 128, 132, 153, 157, 178, 179, 180, 181, 182], [132, 156, 130, 108, 109, 157, 155, 107, 87, 88, 89, 90, 91, 106, 110, 129, 133, 154, 158, 179, 180, 181, 182, 183], [133, 157, 131, 109, 110, 158, 156, 108, 88, 89, 90, 91, 92, 107, 111, 130, 134, 155, 159, 180, 181, 182, 183, 184], [134, 158, 132, 110, 111, 159, 157, 109, 89, 90, 91, 92, 93, 108, 112, 131, 135, 156, 160, 181, 182, 183, 184, 185], [135, 159, 133, 111, 112, 160, 158, 110, 90, 91, 92, 93, 94, 109, 113, 132, 136, 157, 161, 182, 183, 184, 185, 186], [136, 160, 134, 112, 113, 161, 159, 111, 91, 92, 93, 94, 95, 110, 114, 133, 137, 158, 162, 183, 184, 185, 186, 187], [137, 161, 135, 113, 114, 162, 160, 112, 92, 93, 94, 95, 96, 111, 115, 134, 138, 159, 163, 184, 185, 186, 187], [138, 162, 136, 114, 115, 163, 161, 113, 93, 94, 95, 96, 97, 112, 116, 135, 139, 160, 185, 186, 187], [139, 163, 137, 115, 116, 162, 114, 94, 95, 96, 97, 98, 113, 117, 136, 140, 161, 186, 187], [140, 138, 116, 117, 163, 115, 95, 96, 97, 98, 99, 114, 118, 137, 141, 162, 187], [141, 139, 117, 118, 116, 96, 97, 98, 99, 100, 115, 119, 138, 163], [140, 118, 119, 117, 97, 98, 99, 100, 101, 116, 120, 139], [143, 167, 168, 166, 144, 165, 169, 193, 194, 195, 196, 197], [144, 168, 142, 169, 167, 145, 166, 170, 194, 195, 196, 197, 198], [145, 169, 143, 170, 168, 121, 142, 146, 167, 171, 195, 196, 197, 198, 199], [146, 170, 144, 121, 171, 169, 122, 143, 147, 168, 172, 196, 197, 198, 199, 200], [147, 171, 145, 121, 122, 172, 170, 123, 144, 148, 169, 173, 197, 198, 199, 200, 201], [148, 172, 146, 122, 123, 173, 171, 121, 124, 145, 149, 170, 174, 198, 199, 200, 201, 202], [149, 173, 147, 123, 124, 174, 172, 122, 121, 125, 146, 150, 171, 175, 199, 200, 201, 202, 203], [150, 174, 148, 124, 125, 175, 173, 123, 103, 122, 126, 147, 151, 172, 176, 200, 201, 202, 203, 204], [151, 175, 149, 125, 126, 176, 174, 124, 103, 104, 123, 127, 148, 152, 173, 177, 201, 202, 203, 204, 205], [152, 176, 150, 126, 127, 177, 175, 125, 103, 104, 105, 124, 128, 149, 153, 174, 178, 202, 203, 204, 205, 206], [153, 177, 151, 127, 128, 178, 176, 126, 103, 104, 105, 106, 125, 129, 150, 154, 175, 179, 203, 204, 205, 206, 207], [154, 178, 152, 128, 129, 179, 177, 127, 103, 104, 105, 106, 107, 126, 130, 151, 155, 176, 180, 204, 205, 206, 207, 208], [155, 179, 153, 129, 130, 180, 178, 128, 104, 105, 106, 107, 108, 127, 131, 152, 156, 177, 181, 205, 206, 207, 208, 209], [156, 180, 154, 130, 131, 181, 179, 129, 105, 106, 107, 108, 109, 128, 132, 153, 157, 178, 182, 206, 207, 208, 209, 210], [157, 181, 155, 131, 132, 182, 180, 130, 106, 107, 108, 109, 110, 129, 133, 154, 158, 179, 183, 207, 208, 209, 210, 211], [158, 182, 156, 132, 133, 183, 181, 131, 107, 108, 109, 110, 111, 130, 134, 155, 159, 180, 184, 208, 209, 210, 211, 212], [159, 183, 157, 133, 134, 184, 182, 132, 108, 109, 110, 111, 112, 131, 135, 156, 160, 181, 185, 209, 210, 211, 212, 213], [160, 184, 158, 134, 135, 185, 183, 133, 109, 110, 111, 112, 113, 132, 136, 157, 161, 182, 186, 210, 211, 212, 213], [161, 185, 159, 135, 136, 186, 184, 134, 110, 111, 112, 113, 114, 133, 137, 158, 162, 183, 187, 211, 212, 213], [162, 186, 160, 136, 137, 187, 185, 135, 111, 112, 113, 114, 115, 134, 138, 159, 163, 184, 212, 213], [163, 187, 161, 137, 138, 186, 136, 112, 113, 114, 115, 116, 135, 139, 160, 185, 213], [162, 138, 139, 187, 137, 113, 114, 115, 116, 117, 136, 140, 161, 186], [165, 192, 193, 191, 166, 190, 194, 214, 215, 216, 217], [166, 193, 164, 194, 192, 142, 167, 191, 195, 214, 215, 216, 217, 218], [167, 194, 165, 142, 195, 193, 143, 164, 168, 192, 196, 215, 216, 217, 218, 219], [168, 195, 166, 142, 143, 196, 194, 144, 165, 169, 193, 197, 216, 217, 218, 219, 220], [169, 196, 167, 143, 144, 197, 195, 142, 145, 166, 170, 194, 198, 217, 218, 219, 220, 221], [170, 197, 168, 144, 145, 198, 196, 143, 121, 142, 146, 167, 171, 195, 199, 218, 219, 220, 221, 222], [171, 198, 169, 145, 146, 199, 197, 144, 121, 122, 143, 147, 168, 172, 196, 200, 219, 220, 221, 222, 223], [172, 199, 170, 146, 147, 200, 198, 145, 121, 122, 123, 144, 148, 169, 173, 197, 201, 220, 221, 222, 223, 224], [173, 200, 171, 147, 148, 201, 199, 146, 121, 122, 123, 124, 145, 149, 170, 174, 198, 202, 221, 222, 223, 224, 225], [174, 201, 172, 148, 149, 202, 200, 147, 121, 122, 123, 124, 125, 146, 150, 171, 175, 199, 203, 222, 223, 224, 225, 226], [175, 202, 173, 149, 150, 203, 201, 148, 122, 123, 124, 125, 126, 147, 151, 172, 176, 200, 204, 223, 224, 225, 226, 227], [176, 203, 174, 150, 151, 204, 202, 149, 123, 124, 125, 126, 127, 148, 152, 173, 177, 201, 205, 224, 225, 226, 227, 228], [177, 204, 175, 151, 152, 205, 203, 150, 124, 125, 126, 127, 128, 149, 153, 174, 178, 202, 206, 225, 226, 227, 228, 229], [178, 205, 176, 152, 153, 206, 204, 151, 125, 126, 127, 128, 129, 150, 154, 175, 179, 203, 207, 226, 227, 228, 229, 230], [179, 206, 177, 153, 154, 207, 205, 152, 126, 127, 128, 129, 130, 151, 155, 176, 180, 204, 208, 227, 228, 229, 230, 231], [180, 207, 178, 154, 155, 208, 206, 153, 127, 128, 129, 130, 131, 152, 156, 177, 181, 205, 209, 228, 229, 230, 231], [181, 208, 179, 155, 156, 209, 207, 154, 128, 129, 130, 131, 132, 153, 157, 178, 182, 206, 210, 229, 230, 231], [182, 209, 180, 156, 157, 210, 208, 155, 129, 130, 131, 132, 133, 154, 158, 179, 183, 207, 211, 230, 231], [183, 210, 181, 157, 158, 211, 209, 156, 130, 131, 132, 133, 134, 155, 159, 180, 184, 208, 212, 231], [184, 211, 182, 158, 159, 212, 210, 157, 131, 132, 133, 134, 135, 156, 160, 181, 185, 209, 213], [185, 212, 183, 159, 160, 213, 211, 158, 132, 133, 134, 135, 136, 157, 161, 182, 186, 210], [186, 213, 184, 160, 161, 212, 159, 133, 134, 135, 136, 137, 158, 162, 183, 187, 211], [187, 185, 161, 162, 213, 160, 134, 135, 136, 137, 138, 159, 163, 184, 212], [186, 162, 163, 161, 135, 136, 137, 138, 139, 160, 185, 213], [189, 190], [190, 188, 191, 214], [191, 189, 214, 164, 188, 192, 215, 232], [192, 214, 190, 164, 215, 165, 189, 193, 216, 232, 233], [193, 215, 191, 164, 165, 216, 214, 166, 190, 194, 217, 232, 233, 234], [194, 216, 192, 165, 166, 217, 215, 164, 142, 167, 191, 195, 214, 218, 232, 233, 234, 235], [195, 217, 193, 166, 167, 218, 216, 165, 142, 143, 164, 168, 192, 196, 215, 219, 232, 233, 234, 235, 236], [196, 218, 194, 167, 168, 219, 217, 166, 142, 143, 144, 165, 169, 193, 197, 216, 220, 233, 234, 235, 236, 237], [197, 219, 195, 168, 169, 220, 218, 167, 142, 143, 144, 145, 166, 170, 194, 198, 217, 221, 234, 235, 236, 237, 238], [198, 220, 196, 169, 170, 221, 219, 168, 142, 143, 144, 145, 146, 167, 171, 195, 199, 218, 222, 235, 236, 237, 238, 239], [199, 221, 197, 170, 171, 222, 220, 169, 143, 144, 145, 146, 147, 168, 172, 196, 200, 219, 223, 236, 237, 238, 239, 240], [200, 222, 198, 171, 172, 223, 221, 170, 144, 145, 146, 147, 148, 169, 173, 197, 201, 220, 224, 237, 238, 239, 240, 241], [201, 223, 199, 172, 173, 224, 222, 171, 145, 146, 147, 148, 149, 170, 174, 198, 202, 221, 225, 238, 239, 240, 241, 242], [202, 224, 200, 173, 174, 225, 223, 172, 146, 147, 148, 149, 150, 171, 175, 199, 203, 222, 226, 239, 240, 241, 242, 243], [203, 225, 201, 174, 175, 226, 224, 173, 147, 148, 149, 150, 151, 172, 176, 200, 204, 223, 227, 240, 241, 242, 243, 244], [204, 226, 202, 175, 176, 227, 225, 174, 148, 149, 150, 151, 152, 173, 177, 201, 205, 224, 228, 241, 242, 243, 244, 245], [205, 227, 203, 176, 177, 228, 226, 175, 149, 150, 151, 152, 153, 174, 178, 202, 206, 225, 229, 242, 243, 244, 245], [206, 228, 204, 177, 178, 229, 227, 176, 150, 151, 152, 153, 154, 175, 179, 203, 207, 226, 230, 243, 244, 245], [207, 229, 205, 178, 179, 230, 228, 177, 151, 152, 153, 154, 155, 176, 180, 204, 208, 227, 231, 244, 245], [208, 230, 206, 179, 180, 231, 229, 178, 152, 153, 154, 155, 156, 177, 181, 205, 209, 228, 245], [209, 231, 207, 180, 181, 230, 179, 153, 154, 155, 156, 157, 178, 182, 206, 210, 229], [210, 208, 181, 182, 231, 180, 154, 155, 156, 157, 158, 179, 183, 207, 211, 230], [211, 209, 182, 183, 181, 155, 156, 157, 158, 159, 180, 184, 208, 212, 231], [212, 210, 183, 184, 182, 156, 157, 158, 159, 160, 181, 185, 209, 213], [213, 211, 184, 185, 183, 157, 158, 159, 160, 161, 182, 186, 210], [212, 185, 186, 184, 158, 159, 160, 161, 162, 183, 187, 211], [215, 191, 192, 232, 190, 164, 165, 189, 193, 216, 233], [216, 232, 214, 192, 193, 233, 191, 164, 165, 166, 190, 194, 217, 234, 246], [217, 233, 215, 193, 194, 234, 232, 192, 164, 165, 166, 167, 191, 195, 214, 218, 235, 246, 247], [218, 234, 216, 194, 195, 235, 233, 193, 164, 165, 166, 167, 168, 192, 196, 215, 219, 232, 236, 246, 247, 248], [219, 235, 217, 195, 196, 236, 234, 194, 165, 166, 167, 168, 169, 193, 197, 216, 220, 233, 237, 246, 247, 248, 249], [220, 236, 218, 196, 197, 237, 235, 195, 166, 167, 168, 169, 170, 194, 198, 217, 221, 234, 238, 246, 247, 248, 249, 250], [221, 237, 219, 197, 198, 238, 236, 196, 167, 168, 169, 170, 171, 195, 199, 218, 222, 235, 239, 247, 248, 249, 250, 251], [222, 238, 220, 198, 199, 239, 237, 197, 168, 169, 170, 171, 172, 196, 200, 219, 223, 236, 240, 248, 249, 250, 251, 252], [223, 239, 221, 199, 200, 240, 238, 198, 169, 170, 171, 172, 173, 197, 201, 220, 224, 237, 241, 249, 250, 251, 252, 253], [224, 240, 222, 200, 201, 241, 239, 199, 170, 171, 172, 173, 174, 198, 202, 221, 225, 238, 242, 250, 251, 252, 253, 254], [225, 241, 223, 201, 202, 242, 240, 200, 171, 172, 173, 174, 175, 199, 203, 222, 226, 239, 243, 251, 252, 253, 254, 255], [226, 242, 224, 202, 203, 243, 241, 201, 172, 173, 174, 175, 176, 200, 204, 223, 227, 240, 244, 252, 253, 254, 255], [227, 243, 225, 203, 204, 244, 242, 202, 173, 174, 175, 176, 177, 201, 205, 224, 228, 241, 245, 253, 254, 255], [228, 244, 226, 204, 205, 245, 243, 203, 174, 175, 176, 177, 178, 202, 206, 225, 229, 242, 254, 255], [229, 245, 227, 205, 206, 244, 204, 175, 176, 177, 178, 179, 203, 207, 226, 230, 243, 255], [230, 228, 206, 207, 245, 205, 176, 177, 178, 179, 180, 204, 208, 227, 231, 244], [231, 229, 207, 208, 206, 177, 178, 179, 180, 181, 205, 209, 228, 245], [230, 208, 209, 207, 178, 179, 180, 181, 182, 206, 210, 229], [233, 215, 216, 214, 190, 191, 192, 193, 194, 217, 234, 246], [234, 232, 216, 217, 246, 215, 191, 192, 193, 194, 195, 214, 218, 235, 247, 256], [235, 246, 233, 217, 218, 247, 216, 192, 193, 194, 195, 196, 215, 219, 232, 236, 248, 256, 257], [236, 247, 234, 218, 219, 248, 246, 217, 193, 194, 195, 196, 197, 216, 220, 233, 237, 249, 256, 257, 258], [237, 248, 235, 219, 220, 249, 247, 218, 194, 195, 196, 197, 198, 217, 221, 234, 238, 246, 250, 256, 257, 258, 259], [238, 249, 236, 220, 221, 250, 248, 219, 195, 196, 197, 198, 199, 218, 222, 235, 239, 247, 251, 256, 257, 258, 259, 260], [239, 250, 237, 221, 222, 251, 249, 220, 196, 197, 198, 199, 200, 219, 223, 236, 240, 248, 252, 257, 258, 259, 260, 261], [240, 251, 238, 222, 223, 252, 250, 221, 197, 198, 199, 200, 201, 220, 224, 237, 241, 249, 253, 258, 259, 260, 261, 262], [241, 252, 239, 223, 224, 253, 251, 222, 198, 199, 200, 201, 202, 221, 225, 238, 242, 250, 254, 259, 260, 261, 262], [242, 253, 240, 224, 225, 254, 252, 223, 199, 200, 201, 202, 203, 222, 226, 239, 243, 251, 255, 260, 261, 262], [243, 254, 241, 225, 226, 255, 253, 224, 200, 201, 202, 203, 204, 223, 227, 240, 244, 252, 261, 262], [244, 255, 242, 226, 227, 254, 225, 201, 202, 203, 204, 205, 224, 228, 241, 245, 253, 262], [245, 243, 227, 228, 255, 226, 202, 203, 204, 205, 206, 225, 229, 242, 254], [244, 228, 229, 227, 203, 204, 205, 206, 207, 226, 230, 243, 255], [247, 234, 235, 256, 233, 215, 216, 217, 218, 219, 232, 236, 248, 257, 263], [248, 256, 246, 235, 236, 257, 234, 216, 217, 218, 219, 220, 233, 237, 249, 258, 263, 264], [249, 257, 247, 236, 237, 258, 256, 235, 217, 218, 219, 220, 221, 234, 238, 246, 250, 259, 263, 264, 265], [250, 258, 248, 237, 238, 259, 257, 236, 218, 219, 220, 221, 222, 235, 239, 247, 251, 256, 260, 263, 264, 265, 266], [251, 259, 249, 238, 239, 260, 258, 237, 219, 220, 221, 222, 223, 236, 240, 248, 252, 257, 261, 263, 264, 265, 266], [252, 260, 250, 239, 240, 261, 259, 238, 220, 221, 222, 223, 224, 237, 241, 249, 253, 258, 262, 264, 265, 266], [253, 261, 251, 240, 241, 262, 260, 239, 221, 222, 223, 224, 225, 238, 242, 250, 254, 259, 265, 266], [254, 262, 252, 241, 242, 261, 240, 222, 223, 224, 225, 226, 239, 243, 251, 255, 260, 266], [255, 253, 242, 243, 262, 241, 223, 224, 225, 226, 227, 240, 244, 252, 261], [254, 243, 244, 242, 224, 225, 226, 227, 228, 241, 245, 253, 262], [257, 247, 248, 263, 246, 233, 234, 235, 236, 237, 249, 258, 264], [258, 263, 256, 248, 249, 264, 247, 234, 235, 236, 237, 238, 246, 250, 259, 265], [259, 264, 257, 249, 250, 265, 263, 248, 235, 236, 237, 238, 239, 247, 251, 256, 260, 266], [260, 265, 258, 250, 251, 266, 264, 249, 236, 237, 238, 239, 240, 248, 252, 257, 261, 263], [261, 266, 259, 251, 252, 265, 250, 237, 238, 239, 240, 241, 249, 253, 258, 262, 264], [262, 260, 252, 253, 266, 251, 238, 239, 240, 241, 242, 250, 254, 259, 265], [261, 253, 254, 252, 239, 240, 241, 242, 243, 251, 255, 260, 266], [264, 257, 258, 256, 246, 247, 248, 249, 250, 259, 265], [265, 263, 258, 259, 257, 247, 248, 249, 250, 251, 256, 260, 266], [266, 264, 259, 260, 258, 248, 249, 250, 251, 252, 257, 261, 263], [265, 260, 261, 259, 249, 250, 251, 252, 253, 258, 262, 264]]
Column_Numbers2 = list(np.arange(1,TotalNumbcol+1,1))
Chosen_Columns2 = []
# shuffle(Column_Numbers2) <--- This line was very slow.
Column_Numbers2 = np.random.permutation(Column_Numbers2).tolist()
rand = Column_Numbers2.pop()
Chosen_Columns2.append(rand)
while Column_Numbers2:
for i in range(rand-1,rand):
rand = NeighborsperColumn[i]
rand = [x for x in rand if x not in Chosen_Columns2]
shuffle(rand)
try:
rand = rand.pop()
Chosen_Columns2.append(rand)
Column_Numbers2.remove(rand)
except IndexError:
rand = Column_Numbers2.pop()
Chosen_Columns2.append(rand)
END_CLOCK = datetime.now()
DELTA_TIME = END_CLOCK - START_CLOCK
print DELTA_TIME
In general you should use a profiler to find the lines in your code that are too slow.

How to find differences of mat files in Python in human readable format?

.mat files can be loaded into Python with:
import scipy.io
matdata1 = scipy.io.loadmat('file1.mat')
matdata2 = scipy.io.loadmat('file2.mat')
the files can then be piped and save the mat files as text by calling the following Python function:
def mat2txt(matdata):
for k, v in matdata.items(): #Python 3 specific
if isinstance(v,dict):
myprint(v)
else:
print (k,v)
The two .mat files that are being compared are of the same structure and type with different values.
I would like to able to identify the different values in human readable format, and not just their location.
I have tried:
diff matdata1.txt matdata2.txt
diff matdata1.txt matdata2.txt | grep "<" | sed 's/^<//g'
grep -v -F -x -f matdata1.txt matdata2.txt
which do not point to specific differences in values, and they are not within Python. I hoped to store the .mat files as .txt to be able to create a static state to compare the files data at different dates relative to itself and other files, as well as, affording the opportunity to store in git for future comparisons.
A toy example of the resulting data files are:
matdata1.txt
b [[([[(array([[0]], dtype=uint8),)]],)]]
a [[([[(array([[0]], dtype=uint8),)]],)]]
c [[ ([[(array([[ ([[122, 139, 156, 173, 190, 207, 224, 1, 18, 35, 52, 69, 86, 103, 120], [138, 155, 172, 189, 206, 223, 15, 17, 34, 51, 68, 85, 102, 119, 121], [154, 171, 188, 205, 222, 14, 16, 33, 50, 67, 84, 101, 118, 135, 137], [170, 187, 204, 221, 13, 30, 32, 49, 66, 83, 100, 117, 134, 136, 153], [186, 203, 220, 12, 29, 31, 48, 65, 82, 99, 116, 133, 150, 152, 169], [202, 22, 11, 28, 45, 47, 64, 81, 98, 115, 132, 149, 151, 168, 185], [218, 10, 27, 33, 46, 63, 80, 97, 114, 131, 148, 165, 167, 184, 201], [9, 26, 43, 60, 62, 11, 96, 113, 130, 147, 164, 166, 183, 200, 217], [25, 42, 59, 61, 78, 95, 112, 99, 146, 163, 180, 182, 199, 216, 8], [41, 58, 75, 77, 94, 111, 128, 145, 162, 179, 181, 198, 215, 7, 24], [57, 74, 76, 93, 110, 127, 144, 161, 178, 195, 197, 214, 6, 23, 40], [73, 90, 92, 109, 126, 143, 160, 177, 194, 196, 213, 5, 22, 39, 56], [89, 91, 108, 125, 142, 159, 176, 193, 210, 212, 4, 21, 38, 55, 72], [105, 107, 124, 141, 158, 175, 192, 209, 211, 3, 20, 37, 54, 71, 88], [106, 123, 140, 157, 174, 191, 208, 225, 2, 19, 36, 53, 70, 87, 104]],)]],
dtype=[('c', 'O')]),)]],)]]
__header__ b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Mon Jun 27 20:55:29 2016'
d [[1]]
__globals__ []
f ['string']
__version__ 1.0
e [[2]]
matdata2.txt
e [[2]]
d [[1]]
__globals__ []
f ['string']
__header__ b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Mon Jun 27 20:54:48 2016'
c [[ ([[(array([[ ([[122, 139, 156, 173, 190, 207, 224, 1, 18, 35, 52, 69, 86, 103, 120], [138, 155, 172, 189, 206, 223, 15, 17, 34, 51, 68, 85, 102, 119, 121], [154, 171, 188, 205, 222, 14, 16, 33, 50, 67, 84, 101, 118, 135, 137], [170, 187, 204, 221, 13, 30, 32, 49, 66, 83, 100, 117, 134, 136, 153], [186, 203, 220, 12, 29, 31, 48, 65, 82, 99, 116, 133, 150, 152, 169], [202, 219, 11, 28, 45, 47, 64, 81, 98, 115, 132, 149, 151, 168, 185], [218, 10, 27, 44, 46, 63, 80, 97, 114, 131, 148, 165, 167, 184, 201], [9, 26, 43, 60, 62, 79, 96, 113, 130, 147, 164, 166, 183, 200, 217], [25, 42, 59, 61, 78, 95, 112, 129, 146, 163, 180, 182, 199, 216, 8], [41, 58, 75, 77, 94, 111, 128, 145, 162, 179, 181, 198, 215, 7, 24], [57, 74, 76, 93, 110, 127, 144, 161, 178, 195, 197, 214, 6, 23, 40], [73, 90, 92, 109, 126, 143, 160, 177, 194, 196, 213, 5, 22, 39, 56], [89, 91, 108, 125, 142, 159, 176, 193, 210, 212, 4, 21, 38, 55, 72], [105, 107, 124, 141, 158, 175, 192, 209, 211, 3, 20, 37, 54, 71, 88], [106, 123, 140, 157, 174, 191, 208, 225, 2, 19, 36, 53, 70, 87, 104]],)]],
dtype=[('c', 'O')]),)]],)]]
a [[([[(array([[1]], dtype=uint8),)]],)]]
b [[([[(array([[0]], dtype=uint8),)]],)]]
__version__ 1.0

Categories