Skip to content

Instantly share code, notes, and snippets.

@nmatzke
Created February 27, 2020 01:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nmatzke/172ad71d7418cedaead9e01994fc36c1 to your computer and use it in GitHub Desktop.
Save nmatzke/172ad71d7418cedaead9e01994fc36c1 to your computer and use it in GitHub Desktop.
Takes 4.6 seconds for 2000 exp operations
using LinearAlgebra
tmpstr = "Any[2 9 0.08; 2 10 0.15; 2 11 0.22; 2 12 0.29; 2 13 0.36; 2 14 0.43; 3 9 0.02; 3 15 0.16; 3 16 0.23; 3 17 0.3; 3 18 0.37; 3 19 0.44; 4 10 0.03; 4 15 0.1; 4 20 0.24; 4 21 0.31; 4 22 0.38; 4 23 0.45; 5 11 0.04; 5 16 0.11; 5 20 0.18; 5 24 0.32; 5 25 0.39; 5 26 0.46; 6 12 0.05; 6 17 0.12; 6 21 0.19; 6 24 0.26; 6 27 0.4; 6 28 0.47; 7 13 0.06; 7 18 0.13; 7 22 0.2; 7 25 0.27; 7 27 0.34; 7 29 0.48; 8 14 0.07; 8 19 0.14; 8 23 0.21; 8 26 0.28; 8 28 0.35; 8 29 0.42; 9 30 0.31; 9 31 0.45; 9 32 0.59; 9 33 0.73; 9 34 0.87; 10 30 0.18; 10 35 0.45999999999999996; 10 36 0.6; 10 37 0.74; 10 38 0.88; 11 31 0.19; 11 35 0.32999999999999996; 11 39 0.61; 11 40 0.75; 11 41 0.89; 12 32 0.2; 12 36 0.33999999999999997; 12 39 0.48; 12 42 0.76; 12 43 0.8999999999999999; 13 33 0.21000000000000002; 13 37 0.35; 13 40 0.49; 13 42 0.63; 13 44 0.9099999999999999; 14 34 0.22000000000000003; 14 38 0.36; 14 41 0.5; 14 43 0.6399999999999999; 14 44 0.78; 15 30 0.05; 15 45 0.47; 15 46 0.61; 15 47 0.75; 15 48 0.89; 16 31 0.06; 16 45 0.33999999999999997; 16 49 0.62; 16 50 0.76; 16 51 0.9; 17 32 0.07; 17 46 0.35; 17 49 0.49; 17 52 0.77; 17 53 0.9099999999999999; 18 33 0.08; 18 47 0.36; 18 50 0.5; 18 52 0.64; 18 54 0.9199999999999999; 19 34 0.09000000000000001; 19 48 0.37; 19 51 0.51; 19 53 0.6499999999999999; 19 54 0.79; 20 35 0.07; 20 45 0.21000000000000002; 20 55 0.63; 20 56 0.77; 20 57 0.91; 21 36 0.08; 21 46 0.22; 21 55 0.5; 21 58 0.78; 21 59 0.9199999999999999; 22 37 0.09; 22 47 0.23; 22 56 0.51; 22 58 0.65; 22 60 0.9299999999999999; 23 38 0.1; 23 48 0.24000000000000002; 23 57 0.52; 23 59 0.6599999999999999; 23 60 0.8; 24 39 0.09; 24 49 0.22999999999999998; 24 55 0.37; 24 61 0.79; 24 62 0.9299999999999999; 25 40 0.1; 25 50 0.24; 25 56 0.38; 25 61 0.66; 25 63 0.94; 26 41 0.11000000000000001; 26 51 0.25; 26 57 0.39; 26 62 0.6699999999999999; 26 63 0.81; 27 42 0.11; 27 52 0.25; 27 58 0.39; 27 61 0.53; 27 64 0.95; 28 43 0.12000000000000001; 28 53 0.26; 28 59 0.4; 28 62 0.54; 28 64 0.8200000000000001; 29 44 0.13; 29 54 0.27; 29 60 0.41000000000000003; 29 63 0.55; 29 64 0.69; 30 65 0.69; 30 66 0.8999999999999999; 30 67 1.1099999999999999; 30 68 1.32; 31 65 0.49; 31 69 0.9099999999999999; 31 70 1.12; 31 71 1.33; 32 66 0.5; 32 69 0.71; 32 72 1.13; 32 73 1.3399999999999999; 33 67 0.51; 33 70 0.72; 33 72 0.9299999999999999; 33 74 1.35; 34 68 0.52; 34 71 0.73; 34 73 0.94; 34 74 1.15; 35 65 0.29; 35 75 0.9199999999999999; 35 76 1.13; 35 77 1.34; 36 66 0.3; 36 75 0.72; 36 78 1.1400000000000001; 36 79 1.35; 37 67 0.31; 37 76 0.73; 37 78 0.94; 37 80 1.3599999999999999; 38 68 0.32; 38 77 0.74; 38 79 0.95; 38 80 1.16; 39 69 0.31; 39 75 0.52; 39 81 1.15; 39 82 1.3599999999999999; 40 70 0.32; 40 76 0.53; 40 81 0.95; 40 83 1.37; 41 71 0.33; 41 77 0.5399999999999999; 41 82 0.96; 41 83 1.17; 42 72 0.33; 42 78 0.54; 42 81 0.75; 42 84 1.38; 43 73 0.34; 43 79 0.5499999999999999; 43 82 0.76; 43 84 1.18; 44 74 0.35000000000000003; 44 80 0.5599999999999999; 44 83 0.77; 44 84 0.98; 45 65 0.09; 45 85 0.9299999999999999; 45 86 1.1400000000000001; 45 87 1.35; 46 66 0.1; 46 85 0.73; 46 88 1.15; 46 89 1.3599999999999999; 47 67 0.11; 47 86 0.74; 47 88 0.95; 47 90 1.37; 48 68 0.12000000000000001; 48 87 0.75; 48 89 0.96; 48 90 1.17; 49 69 0.11; 49 85 0.53; 49 91 1.1600000000000001; 49 92 1.37; 50 70 0.12; 50 86 0.54; 50 91 0.96; 50 93 1.38; 51 71 0.13; 51 87 0.5499999999999999; 51 92 0.97; 51 93 1.18; 52 72 0.13; 52 88 0.55; 52 91 0.76; 52 94 1.39; 53 73 0.14; 53 89 0.5599999999999999; 53 92 0.77; 53 94 1.19; 54 74 0.15000000000000002; 54 90 0.57; 54 93 0.78; 54 94 0.99; 55 75 0.12000000000000001; 55 85 0.33; 55 95 1.17; 55 96 1.38; 56 76 0.13; 56 86 0.34; 56 95 0.97; 56 97 1.3900000000000001; 57 77 0.14; 57 87 0.35000000000000003; 57 96 0.98; 57 97 1.19; 58 78 0.14; 58 88 0.35; 58 95 0.77; 58 98 1.4; 59 79 0.15000000000000002; 59 89 0.36; 59 96 0.78; 59 98 1.2; 60 80 0.16; 60 90 0.37; 60 97 0.79; 60 98 1.0; 61 81 0.15; 61 91 0.36; 61 95 0.5700000000000001; 61 99 1.41; 62 82 0.16; 62 92 0.37; 62 96 0.58; 62 99 1.21; 63 83 0.17; 63 93 0.38; 63 97 0.59; 63 99 1.01; 64 84 0.18; 64 94 0.39; 64 98 0.6; 64 99 0.81; 65 100 1.22; 65 101 1.5; 65 102 1.78; 66 100 0.95; 66 103 1.5099999999999998; 66 104 1.79; 67 101 0.96; 67 103 1.24; 67 105 1.8; 68 102 0.97; 68 104 1.25; 68 105 1.5299999999999998; 69 100 0.6799999999999999; 69 106 1.52; 69 107 1.8; 70 101 0.69; 70 106 1.25; 70 108 1.81; 71 102 0.7; 71 107 1.2599999999999998; 71 108 1.54; 72 103 0.7; 72 106 0.98; 72 109 1.8199999999999998; 73 104 0.71; 73 107 0.99; 73 109 1.5499999999999998; 74 105 0.72; 74 108 1.0; 74 109 1.2799999999999998; 75 100 0.41; 75 110 1.5299999999999998; 75 111 1.81; 76 101 0.42; 76 110 1.26; 76 112 1.82; 77 102 0.43; 77 111 1.27; 77 112 1.5499999999999998; 78 103 0.43; 78 110 0.99; 78 113 1.83; 79 104 0.44; 79 111 1.0; 79 113 1.56; 80 105 0.45; 80 112 1.01; 80 113 1.29; 81 106 0.44; 81 110 0.72; 81 114 1.8399999999999999; 82 107 0.45; 82 111 0.73; 82 114 1.5699999999999998; 83 108 0.46; 83 112 0.74; 83 114 1.2999999999999998; 84 109 0.47000000000000003; 84 113 0.75; 84 114 1.03; 85 100 0.14; 85 115 1.54; 85 116 1.82; 86 101 0.15; 86 115 1.27; 86 117 1.83; 87 102 0.16; 87 116 1.2799999999999998; 87 117 1.56; 88 103 0.16; 88 115 1.0; 88 118 1.8399999999999999; 89 104 0.17; 89 116 1.01; 89 118 1.5699999999999998; 90 105 0.18; 90 117 1.02; 90 118 1.2999999999999998; 91 106 0.16999999999999998; 91 115 0.73; 91 119 1.85; 92 107 0.18; 92 116 0.74; 92 119 1.58; 93 108 0.19; 93 117 0.75; 93 119 1.31; 94 109 0.2; 94 118 0.76; 94 119 1.04; 95 110 0.18; 95 115 0.46; 95 120 1.8599999999999999; 96 111 0.19; 96 116 0.47000000000000003; 96 120 1.5899999999999999; 97 112 0.2; 97 117 0.48000000000000004; 97 120 1.3199999999999998; 98 113 0.21000000000000002; 98 118 0.49; 98 120 1.05; 99 114 0.22; 99 119 0.5; 99 120 0.78; 100 121 1.9; 100 122 2.25; 101 121 1.56; 101 123 2.26; 102 122 1.5699999999999998; 102 123 1.92; 103 121 1.22; 103 124 2.27; 104 122 1.23; 104 124 1.9299999999999997; 105 123 1.24; 105 124 1.5899999999999999; 106 121 0.8799999999999999; 106 125 2.2800000000000002; 107 122 0.8899999999999999; 107 125 1.94; 108 123 0.8999999999999999; 108 125 1.6; 109 124 0.9099999999999999; 109 125 1.26; 110 121 0.54; 110 126 2.29; 111 122 0.55; 111 126 1.9499999999999997; 112 123 0.56; 112 126 1.6099999999999999; 113 124 0.5700000000000001; 113 126 1.27; 114 125 0.5800000000000001; 114 126 0.9299999999999999; 115 121 0.2; 115 127 2.3; 116 122 0.21000000000000002; 116 127 1.96; 117 123 0.22; 117 127 1.62; 118 124 0.23; 118 127 1.28; 119 125 0.24; 119 127 0.94; 120 126 0.25; 120 127 0.6000000000000001; 121 128 2.73; 122 128 2.32; 123 128 1.9100000000000001; 124 128 1.5; 125 128 1.0899999999999999; 126 128 0.68; 127 128 0.27; 2 1 0.123; 3 1 0.123; 4 1 0.123; 5 1 0.123; 6 1 0.123; 7 1 0.123; 8 1 0.123; 9 2 0.123; 9 3 0.123; 10 2 0.123; 10 4 0.123; 11 2 0.123; 11 5 0.123; 12 2 0.123; 12 6 0.123; 13 2 0.123; 13 7 0.123; 14 2 0.123; 14 8 0.123; 15 3 0.123; 15 4 0.123; 16 3 0.123; 16 5 0.123; 17 3 0.123; 17 6 0.123; 18 3 0.123; 18 7 0.123; 19 3 0.123; 19 8 0.123; 20 4 0.123; 20 5 0.123; 21 4 0.123; 21 6 0.123; 22 4 0.123; 22 7 0.123; 23 4 0.123; 23 8 0.123; 24 5 0.123; 24 6 0.123; 25 5 0.123; 25 7 0.123; 26 5 0.123; 26 8 0.123; 27 6 0.123; 27 7 0.123; 28 6 0.123; 28 8 0.123; 29 7 0.123; 29 8 0.123; 30 9 0.123; 30 10 0.123; 30 15 0.123; 31 9 0.123; 31 11 0.123; 31 16 0.123; 32 9 0.123; 32 12 0.123; 32 17 0.123; 33 9 0.123; 33 13 0.123; 33 18 0.123; 34 9 0.123; 34 14 0.123; 34 19 0.123; 35 10 0.123; 35 11 0.123; 35 20 0.123; 36 10 0.123; 36 12 0.123; 36 21 0.123; 37 10 0.123; 37 13 0.123; 37 22 0.123; 38 10 0.123; 38 14 0.123; 38 23 0.123; 39 11 0.123; 39 12 0.123; 39 24 0.123; 40 11 0.123; 40 13 0.123; 40 25 0.123; 41 11 0.123; 41 14 0.123; 41 26 0.123; 42 12 0.123; 42 13 0.123; 42 27 0.123; 43 12 0.123; 43 14 0.123; 43 28 0.123; 44 13 0.123; 44 14 0.123; 44 29 0.123; 45 15 0.123; 45 16 0.123; 45 20 0.123; 46 15 0.123; 46 17 0.123; 46 21 0.123; 47 15 0.123; 47 18 0.123; 47 22 0.123; 48 15 0.123; 48 19 0.123; 48 23 0.123; 49 16 0.123; 49 17 0.123; 49 24 0.123; 50 16 0.123; 50 18 0.123; 50 25 0.123; 51 16 0.123; 51 19 0.123; 51 26 0.123; 52 17 0.123; 52 18 0.123; 52 27 0.123; 53 17 0.123; 53 19 0.123; 53 28 0.123; 54 18 0.123; 54 19 0.123; 54 29 0.123; 55 20 0.123; 55 21 0.123; 55 24 0.123; 56 20 0.123; 56 22 0.123; 56 25 0.123; 57 20 0.123; 57 23 0.123; 57 26 0.123; 58 21 0.123; 58 22 0.123; 58 27 0.123; 59 21 0.123; 59 23 0.123; 59 28 0.123; 60 22 0.123; 60 23 0.123; 60 29 0.123; 61 24 0.123; 61 25 0.123; 61 27 0.123; 62 24 0.123; 62 26 0.123; 62 28 0.123; 63 25 0.123; 63 26 0.123; 63 29 0.123; 64 27 0.123; 64 28 0.123; 64 29 0.123; 65 30 0.123; 65 31 0.123; 65 35 0.123; 65 45 0.123; 66 30 0.123; 66 32 0.123; 66 36 0.123; 66 46 0.123; 67 30 0.123; 67 33 0.123; 67 37 0.123; 67 47 0.123; 68 30 0.123; 68 34 0.123; 68 38 0.123; 68 48 0.123; 69 31 0.123; 69 32 0.123; 69 39 0.123; 69 49 0.123; 70 31 0.123; 70 33 0.123; 70 40 0.123; 70 50 0.123; 71 31 0.123; 71 34 0.123; 71 41 0.123; 71 51 0.123; 72 32 0.123; 72 33 0.123; 72 42 0.123; 72 52 0.123; 73 32 0.123; 73 34 0.123; 73 43 0.123; 73 53 0.123; 74 33 0.123; 74 34 0.123; 74 44 0.123; 74 54 0.123; 75 35 0.123; 75 36 0.123; 75 39 0.123; 75 55 0.123; 76 35 0.123; 76 37 0.123; 76 40 0.123; 76 56 0.123; 77 35 0.123; 77 38 0.123; 77 41 0.123; 77 57 0.123; 78 36 0.123; 78 37 0.123; 78 42 0.123; 78 58 0.123; 79 36 0.123; 79 38 0.123; 79 43 0.123; 79 59 0.123; 80 37 0.123; 80 38 0.123; 80 44 0.123; 80 60 0.123; 81 39 0.123; 81 40 0.123; 81 42 0.123; 81 61 0.123; 82 39 0.123; 82 41 0.123; 82 43 0.123; 82 62 0.123; 83 40 0.123; 83 41 0.123; 83 44 0.123; 83 63 0.123; 84 42 0.123; 84 43 0.123; 84 44 0.123; 84 64 0.123; 85 45 0.123; 85 46 0.123; 85 49 0.123; 85 55 0.123; 86 45 0.123; 86 47 0.123; 86 50 0.123; 86 56 0.123; 87 45 0.123; 87 48 0.123; 87 51 0.123; 87 57 0.123; 88 46 0.123; 88 47 0.123; 88 52 0.123; 88 58 0.123; 89 46 0.123; 89 48 0.123; 89 53 0.123; 89 59 0.123; 90 47 0.123; 90 48 0.123; 90 54 0.123; 90 60 0.123; 91 49 0.123; 91 50 0.123; 91 52 0.123; 91 61 0.123; 92 49 0.123; 92 51 0.123; 92 53 0.123; 92 62 0.123; 93 50 0.123; 93 51 0.123; 93 54 0.123; 93 63 0.123; 94 52 0.123; 94 53 0.123; 94 54 0.123; 94 64 0.123; 95 55 0.123; 95 56 0.123; 95 58 0.123; 95 61 0.123; 96 55 0.123; 96 57 0.123; 96 59 0.123; 96 62 0.123; 97 56 0.123; 97 57 0.123; 97 60 0.123; 97 63 0.123; 98 58 0.123; 98 59 0.123; 98 60 0.123; 98 64 0.123; 99 61 0.123; 99 62 0.123; 99 63 0.123; 99 64 0.123; 100 65 0.123; 100 66 0.123; 100 69 0.123; 100 75 0.123; 100 85 0.123; 101 65 0.123; 101 67 0.123; 101 70 0.123; 101 76 0.123; 101 86 0.123; 102 65 0.123; 102 68 0.123; 102 71 0.123; 102 77 0.123; 102 87 0.123; 103 66 0.123; 103 67 0.123; 103 72 0.123; 103 78 0.123; 103 88 0.123; 104 66 0.123; 104 68 0.123; 104 73 0.123; 104 79 0.123; 104 89 0.123; 105 67 0.123; 105 68 0.123; 105 74 0.123; 105 80 0.123; 105 90 0.123; 106 69 0.123; 106 70 0.123; 106 72 0.123; 106 81 0.123; 106 91 0.123; 107 69 0.123; 107 71 0.123; 107 73 0.123; 107 82 0.123; 107 92 0.123; 108 70 0.123; 108 71 0.123; 108 74 0.123; 108 83 0.123; 108 93 0.123; 109 72 0.123; 109 73 0.123; 109 74 0.123; 109 84 0.123; 109 94 0.123; 110 75 0.123; 110 76 0.123; 110 78 0.123; 110 81 0.123; 110 95 0.123; 111 75 0.123; 111 77 0.123; 111 79 0.123; 111 82 0.123; 111 96 0.123; 112 76 0.123; 112 77 0.123; 112 80 0.123; 112 83 0.123; 112 97 0.123; 113 78 0.123; 113 79 0.123; 113 80 0.123; 113 84 0.123; 113 98 0.123; 114 81 0.123; 114 82 0.123; 114 83 0.123; 114 84 0.123; 114 99 0.123; 115 85 0.123; 115 86 0.123; 115 88 0.123; 115 91 0.123; 115 95 0.123; 116 85 0.123; 116 87 0.123; 116 89 0.123; 116 92 0.123; 116 96 0.123; 117 86 0.123; 117 87 0.123; 117 90 0.123; 117 93 0.123; 117 97 0.123; 118 88 0.123; 118 89 0.123; 118 90 0.123; 118 94 0.123; 118 98 0.123; 119 91 0.123; 119 92 0.123; 119 93 0.123; 119 94 0.123; 119 99 0.123; 120 95 0.123; 120 96 0.123; 120 97 0.123; 120 98 0.123; 120 99 0.123; 121 100 0.123; 121 101 0.123; 121 103 0.123; 121 106 0.123; 121 110 0.123; 121 115 0.123; 122 100 0.123; 122 102 0.123; 122 104 0.123; 122 107 0.123; 122 111 0.123; 122 116 0.123; 123 101 0.123; 123 102 0.123; 123 105 0.123; 123 108 0.123; 123 112 0.123; 123 117 0.123; 124 103 0.123; 124 104 0.123; 124 105 0.123; 124 109 0.123; 124 113 0.123; 124 118 0.123; 125 106 0.123; 125 107 0.123; 125 108 0.123; 125 109 0.123; 125 114 0.123; 125 119 0.123; 126 110 0.123; 126 111 0.123; 126 112 0.123; 126 113 0.123; 126 114 0.123; 126 120 0.123; 127 115 0.123; 127 116 0.123; 127 117 0.123; 127 118 0.123; 127 119 0.123; 127 120 0.123; 128 121 0.123; 128 122 0.123; 128 123 0.123; 128 124 0.123; 128 125 0.123; 128 126 0.123; 128 127 0.123]"
Qcols = eval(Meta.parse(tmpstr))
# build a typical size Qmat (128x128)
numstates = 128
tmpzero = repeat([0.0], numstates^2)
Q = reshape(tmpzero, (numstates,numstates))
for h in 1:length(Qcols[:,1])
Q[Qcols[h,1], Qcols[h,2]] = Qcols[h,3]
end
Q
# Make sure the diagonals make the rows sum to 0
for i in 1:numstates
Q[i,i] = -1.0 * sum(Q[i,:]) # sum over rows
end
# Convert to matrix
Q2 = convert(Matrix{Float64}, Q)
typeof(Q)
typeof(Q2) # same
# Exponentiate this a bunch of times for different x0 and t
numruns = 2000
t = collect(1.0:(1.0/numruns):numruns) ./ numruns
x0 = repeat([0.0], numstates)
start_time = Dates.now();
statenum = Any[1];
for i in (1:numruns)
if (i == 1)
statenum[1] = 1
else
statenum[1] += 1
end
if (statenum[1] >= numstates)
statenum[1] = 1
end
x0[statenum[1]] = 1.0
P = exp(Q .* t[statenum[1]]) * x0
#dot(x0, Q, t[statenum[1]]) # Julia 1.4
# Return to all-0 vector
x0[statenum[1]] = 0.0
end
end_time = Dates.now();
final_time = end_time - start_time;
final_time
# 4281 milliseconds; can this be sped up?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment