Created
February 27, 2020 01:03
-
-
Save nmatzke/172ad71d7418cedaead9e01994fc36c1 to your computer and use it in GitHub Desktop.
Takes 4.6 seconds for 2000 exp operations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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