How to visualize Markov Chain transition probabilities in MATLAB? - matlab
I want to visualize my Markov chain using a digraph. I am using the following lines of code:
mc = dtmc(TPM,'StateNames',namesStates);
graphplot(mc,'ColorNodes',true,'ColorEdges',true);
where namesStates is a cell array that contains the names (string) of each node of my MC.
Since the probabilities are so close to each other, I want to visualize the probabilities of each edge of the digraph or the transition rates. Is it possible?
EDIT:
Here is a TPM that I am using:
0,941033925686591 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0,000220296666177119 0,926053752386547 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0,000367161110295198 0,000440593332354237 0,903730356880599 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
7,34322220590395e-05 0 0 0,940960493464532 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 7,34322220590395e-05 0 0,000220296666177119 0,925980320164488 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 7,34322220590395e-05 0,000367161110295198 0,000440593332354237 0,903656924658540 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 7,34322220590395e-05 0 0 0,962990160082244 7,34322220590395e-05 0,000146864444118079 0 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 7,34322220590395e-05 0 0,000220296666177119 0,962696431194008 0,000293728888236158 0 0 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 7,34322220590395e-05 0,000367161110295198 0,000440593332354237 0,962402702305772 0 0 0 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0 0
0,00367161110295198 0 0 0 0 0 0 0 0 0,937362314583639 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0 0
0 0,00367161110295198 0 0 0 0 0 0 0 0,000220296666177119 0,922382141283595 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0 0
0 0 0,00367161110295198 0 0 0 0 0 0 0,000367161110295198 0,000440593332354237 0,900058745777647 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0 0 0 0
0 0 0 0,00367161110295198 0 0 0 0 0 3,85519165809957e-05 0 0 0,937323762667058 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0 0,0367161110295198 0 0 0 0 0
0 0 0 0 0,00367161110295198 0 0 0 0 0 5,07906202575023e-05 0 0,000220296666177119 0,922331350663338 0,000293728888236158 0 0,0367161110295198 0 0 0 0 0 0,0367161110295198 0 0 0 0
0 0 0 0 0 0,00367161110295198 0 0 0 0 0 5,87457776472316e-05 0,000367161110295198 0,000440593332354237 0,900000000000000 0 0 0,0587457776472316 0 0 0 0 0 0,0367161110295198 0 0 0
0 0 0 0 0 0 0,00367161110295198 0 0 0 0 0 3,85519165809957e-05 0 0 0,959353429284770 7,34322220590395e-05 0,000146864444118079 0 0 0 0 0 0 0,0367161110295198 0 0
0 0 0 0 0 0 0 0,00367161110295198 0 0 0 0 0 5,07906202575023e-05 0 0,000220296666177119 0,959047461692858 0,000293728888236158 0 0 0 0 0 0 0 0,0367161110295198 0
0 0 0 0 0 0 0 0 0,00367161110295198 0 0 0 0 0 5,87457776472316e-05 0,000367161110295198 0,000440593332354237 0,958745777647232 0 0 0 0 0 0 0 0 0,0367161110295198
0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 0 0 0 0,970406814510207 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 0 0 0,000220296666177119 0,955426641210163 0,000293728888236158 0 0,0367161110295198 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 0 0,000367161110295198 0,000440593332354237 0,933103245704215 0 0 0,0587457776472316 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 4,40593332354237e-05 0 0 0,970362755176972 7,34322220590395e-05 0,000146864444118079 0,0220296666177119 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 5,50741665442796e-05 0 0,000220296666177119 0,955371567043619 0,000293728888236158 0 0,0367161110295198 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 6,16830665295932e-05 0,000367161110295198 0,000440593332354237 0,933041562637686 0 0 0,0587457776472316
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 4,40593332354237e-05 0 0 0,992392421794684 7,34322220590395e-05 0,000146864444118079
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 5,50741665442796e-05 0 0,000220296666177119 0,992087678073139 0,000293728888236158
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,00734322220590395 0 0 0 0 0 6,16830665295932e-05 0,000367161110295198 0,000440593332354237 0,991787340284917
instead of:
mc = dtmc(TPM,'StateNames',namesStates);
We can do:
mc = dtmc(TPM);
In the documentation you can find the 'LabelEdges' parameter, when set to true the probability is also displayed.
graphplot(mc,'ColorNodes',true,'ColorEdges',true,'LabelEdges',true);
Related
Expanding a matrix according to elements in lists
I have currently created a function which takes in two arguments. function p = matr(x, phi) x_dir = linspace(0, x, 1); r = linspace(0, phi, 1); p = zeros(800, 2); p(1:400, 1) = p(1:400, 1) + x_dir.'; p(401:800, 2) = p(401:800, 2) + r.'; end Which returns this matrix for the given input: path = trajectory(10, pi/2) path = 0 0 0.0251 0 0.0501 0 0.0752 0 0.1003 0 0.1253 0 0.1504 0 0.1754 0 0.2005 0 0.2256 0 0.2506 0 0.2757 0 0.3008 0 0.3258 0 0.3509 0 0.3759 0 0.4010 0 0.4261 0 0.4511 0 0.4762 0 0.5013 0 0.5263 0 0.5514 0 0.5764 0 0.6015 0 0.6266 0 0.6516 0 0.6767 0 0.7018 0 0.7268 0 0.7519 0 0.7769 0 0.8020 0 0.8271 0 0.8521 0 0.8772 0 0.9023 0 0.9273 0 0.9524 0 0.9774 0 1.0025 0 1.0276 0 1.0526 0 1.0777 0 1.1028 0 1.1278 0 1.1529 0 1.1779 0 1.2030 0 1.2281 0 1.2531 0 1.2782 0 1.3033 0 1.3283 0 1.3534 0 1.3784 0 1.4035 0 1.4286 0 1.4536 0 1.4787 0 1.5038 0 1.5288 0 1.5539 0 1.5789 0 1.6040 0 1.6291 0 1.6541 0 1.6792 0 1.7043 0 1.7293 0 1.7544 0 1.7794 0 1.8045 0 1.8296 0 1.8546 0 1.8797 0 1.9048 0 1.9298 0 1.9549 0 1.9799 0 2.0050 0 2.0301 0 2.0551 0 2.0802 0 2.1053 0 2.1303 0 2.1554 0 2.1805 0 2.2055 0 2.2306 0 2.2556 0 2.2807 0 2.3058 0 2.3308 0 2.3559 0 2.3810 0 2.4060 0 2.4311 0 2.4561 0 2.4812 0 2.5063 0 2.5313 0 2.5564 0 2.5815 0 2.6065 0 2.6316 0 2.6566 0 2.6817 0 2.7068 0 2.7318 0 2.7569 0 2.7820 0 2.8070 0 2.8321 0 2.8571 0 2.8822 0 2.9073 0 2.9323 0 2.9574 0 2.9825 0 3.0075 0 3.0326 0 3.0576 0 3.0827 0 3.1078 0 3.1328 0 3.1579 0 3.1830 0 3.2080 0 3.2331 0 3.2581 0 3.2832 0 3.3083 0 3.3333 0 3.3584 0 3.3835 0 3.4085 0 3.4336 0 3.4586 0 3.4837 0 3.5088 0 3.5338 0 3.5589 0 3.5840 0 3.6090 0 3.6341 0 3.6591 0 3.6842 0 3.7093 0 3.7343 0 3.7594 0 3.7845 0 3.8095 0 3.8346 0 3.8596 0 3.8847 0 3.9098 0 3.9348 0 3.9599 0 3.9850 0 4.0100 0 4.0351 0 4.0602 0 4.0852 0 4.1103 0 4.1353 0 4.1604 0 4.1855 0 4.2105 0 4.2356 0 4.2607 0 4.2857 0 4.3108 0 4.3358 0 4.3609 0 4.3860 0 4.4110 0 4.4361 0 4.4612 0 4.4862 0 4.5113 0 4.5363 0 4.5614 0 4.5865 0 4.6115 0 4.6366 0 4.6617 0 4.6867 0 4.7118 0 4.7368 0 4.7619 0 4.7870 0 4.8120 0 4.8371 0 4.8622 0 4.8872 0 4.9123 0 4.9373 0 4.9624 0 4.9875 0 5.0125 0 5.0376 0 5.0627 0 5.0877 0 5.1128 0 5.1378 0 5.1629 0 5.1880 0 5.2130 0 5.2381 0 5.2632 0 5.2882 0 5.3133 0 5.3383 0 5.3634 0 5.3885 0 5.4135 0 5.4386 0 5.4637 0 5.4887 0 5.5138 0 5.5388 0 5.5639 0 5.5890 0 5.6140 0 5.6391 0 5.6642 0 5.6892 0 5.7143 0 5.7393 0 5.7644 0 5.7895 0 5.8145 0 5.8396 0 5.8647 0 5.8897 0 5.9148 0 5.9398 0 5.9649 0 5.9900 0 6.0150 0 6.0401 0 6.0652 0 6.0902 0 6.1153 0 6.1404 0 6.1654 0 6.1905 0 6.2155 0 6.2406 0 6.2657 0 6.2907 0 6.3158 0 6.3409 0 6.3659 0 6.3910 0 6.4160 0 6.4411 0 6.4662 0 6.4912 0 6.5163 0 6.5414 0 6.5664 0 6.5915 0 6.6165 0 6.6416 0 6.6667 0 6.6917 0 6.7168 0 6.7419 0 6.7669 0 6.7920 0 6.8170 0 6.8421 0 6.8672 0 6.8922 0 6.9173 0 6.9424 0 6.9674 0 6.9925 0 7.0175 0 7.0426 0 7.0677 0 7.0927 0 7.1178 0 7.1429 0 7.1679 0 7.1930 0 7.2180 0 7.2431 0 7.2682 0 7.2932 0 7.3183 0 7.3434 0 7.3684 0 7.3935 0 7.4185 0 7.4436 0 7.4687 0 7.4937 0 7.5188 0 7.5439 0 7.5689 0 7.5940 0 7.6190 0 7.6441 0 7.6692 0 7.6942 0 7.7193 0 7.7444 0 7.7694 0 7.7945 0 7.8195 0 7.8446 0 7.8697 0 7.8947 0 7.9198 0 7.9449 0 7.9699 0 7.9950 0 8.0201 0 8.0451 0 8.0702 0 8.0952 0 8.1203 0 8.1454 0 8.1704 0 8.1955 0 8.2206 0 8.2456 0 8.2707 0 8.2957 0 8.3208 0 8.3459 0 8.3709 0 8.3960 0 8.4211 0 8.4461 0 8.4712 0 8.4962 0 8.5213 0 8.5464 0 8.5714 0 8.5965 0 8.6216 0 8.6466 0 8.6717 0 8.6967 0 8.7218 0 8.7469 0 8.7719 0 8.7970 0 8.8221 0 8.8471 0 8.8722 0 8.8972 0 8.9223 0 8.9474 0 8.9724 0 8.9975 0 9.0226 0 9.0476 0 9.0727 0 9.0977 0 9.1228 0 9.1479 0 9.1729 0 9.1980 0 9.2231 0 9.2481 0 9.2732 0 9.2982 0 9.3233 0 9.3484 0 9.3734 0 9.3985 0 9.4236 0 9.4486 0 9.4737 0 9.4987 0 9.5238 0 9.5489 0 9.5739 0 9.5990 0 9.6241 0 9.6491 0 9.6742 0 9.6992 0 9.7243 0 9.7494 0 9.7744 0 9.7995 0 9.8246 0 9.8496 0 9.8747 0 9.8997 0 9.9248 0 9.9499 0 9.9749 0 10.000 0 0 0 0 0.0039 0 0.0079 0 0.0118 0 0.0157 0 0.0197 0 0.0236 0 0.0276 0 0.0315 0 0.0354 0 0.0394 0 0.0433 0 0.0472 0 0.0512 0 0.0551 0 0.0591 0 0.0630 0 0.0669 0 0.0709 0 0.0748 0 0.0787 0 0.0827 0 0.0866 0 0.0905 0 0.0945 0 0.0984 0 0.1024 0 0.1063 0 0.1102 0 0.1142 0 0.1181 0 0.1220 0 0.1260 0 0.1299 0 0.1339 0 0.1378 0 0.1417 0 0.1457 0 0.1496 0 0.1535 0 0.1575 0 0.1614 0 0.1653 0 0.1693 0 0.1732 0 0.1772 0 0.1811 0 0.1850 0 0.1890 0 0.1929 0 0.1968 0 0.2008 0 0.2047 0 0.2087 0 0.2126 0 0.2165 0 0.2205 0 0.2244 0 0.2283 0 0.2323 0 0.2362 0 0.2401 0 0.2441 0 0.2480 0 0.2520 0 0.2559 0 0.2598 0 0.2638 0 0.2677 0 0.2716 0 0.2756 0 0.2795 0 0.2835 0 0.2874 0 0.2913 0 0.2953 0 0.2992 0 0.3031 0 0.3071 0 0.3110 0 0.3149 0 0.3189 0 0.3228 0 0.3268 0 0.3307 0 0.3346 0 0.3386 0 0.3425 0 0.3464 0 0.3504 0 0.3543 0 0.3583 0 0.3622 0 0.3661 0 0.3701 0 0.3740 0 0.3779 0 0.3819 0 0.3858 0 0.3897 0 0.3937 0 0.3976 0 0.4016 0 0.4055 0 0.4094 0 0.4134 0 0.4173 0 0.4212 0 0.4252 0 0.4291 0 0.4331 0 0.4370 0 0.4409 0 0.4449 0 0.4488 0 0.4527 0 0.4567 0 0.4606 0 0.4645 0 0.4685 0 0.4724 0 0.4764 0 0.4803 0 0.4842 0 0.4882 0 0.4921 0 0.4960 0 0.5000 0 0.5039 0 0.5079 0 0.5118 0 0.5157 0 0.5197 0 0.5236 0 0.5275 0 0.5315 0 0.5354 0 0.5393 0 0.5433 0 0.5472 0 0.5512 0 0.5551 0 0.5590 0 0.5630 0 0.5669 0 0.5708 0 0.5748 0 0.5787 0 0.5827 0 0.5866 0 0.5905 0 0.5945 0 0.5984 0 0.6023 0 0.6063 0 0.6102 0 0.6141 0 0.6181 0 0.6220 0 0.6260 0 0.6299 0 0.6338 0 0.6378 0 0.6417 0 0.6456 0 0.6496 0 0.6535 0 0.6575 0 0.6614 0 0.6653 0 0.6693 0 0.6732 0 0.6771 0 0.6811 0 0.6850 0 0.6889 0 0.6929 0 0.6968 0 0.7008 0 0.7047 0 0.7086 0 0.7126 0 0.7165 0 0.7204 0 0.7244 0 0.7283 0 0.7323 0 0.7362 0 0.7401 0 0.7441 0 0.7480 0 0.7519 0 0.7559 0 0.7598 0 0.7637 0 0.7677 0 0.7716 0 0.7756 0 0.7795 0 0.7834 0 0.7874 0 0.7913 0 0.7952 0 0.7992 0 0.8031 0 0.8071 0 0.8110 0 0.8149 0 0.8189 0 0.8228 0 0.8267 0 0.8307 0 0.8346 0 0.8385 0 0.8425 0 0.8464 0 0.8504 0 0.8543 0 0.8582 0 0.8622 0 0.8661 0 0.8700 0 0.8740 0 0.8779 0 0.8819 0 0.8858 0 0.8897 0 0.8937 0 0.8976 0 0.9015 0 0.9055 0 0.9094 0 0.9133 0 0.9173 0 0.9212 0 0.9252 0 0.9291 0 0.9330 0 0.9370 0 0.9409 0 0.9448 0 0.9488 0 0.9527 0 0.9567 0 0.9606 0 0.9645 0 0.9685 0 0.9724 0 0.9763 0 0.9803 0 0.9842 0 0.9881 0 0.9921 0 0.9960 0 1.0000 0 1.0039 0 1.0078 0 1.0118 0 1.0157 0 1.0196 0 1.0236 0 1.0275 0 1.0315 0 1.0354 0 1.0393 0 1.0433 0 1.0472 0 1.0511 0 1.0551 0 1.0590 0 1.0629 0 1.0669 0 1.0708 0 1.0748 0 1.0787 0 1.0826 0 1.0866 0 1.0905 0 1.0944 0 1.0984 0 1.1023 0 1.1063 0 1.1102 0 1.1141 0 1.1181 0 1.1220 0 1.1259 0 1.1299 0 1.1338 0 1.1377 0 1.1417 0 1.1456 0 1.1496 0 1.1535 0 1.1574 0 1.1614 0 1.1653 0 1.1692 0 1.1732 0 1.1771 0 1.1810 0 1.1850 0 1.1889 0 1.1929 0 1.1968 0 1.2007 0 1.2047 0 1.2086 0 1.2125 0 1.2165 0 1.2204 0 1.2244 0 1.2283 0 1.2322 0 1.2362 0 1.2401 0 1.2440 0 1.2480 0 1.2519 0 1.2558 0 1.2598 0 1.2637 0 1.2677 0 1.2716 0 1.2755 0 1.2795 0 1.2834 0 1.2873 0 1.2913 0 1.2952 0 1.2992 0 1.3031 0 1.3070 0 1.3110 0 1.3149 0 1.3188 0 1.3228 0 1.3267 0 1.3306 0 1.3346 0 1.3385 0 1.3425 0 1.3464 0 1.3503 0 1.3543 0 1.3582 0 1.3621 0 1.3661 0 1.3700 0 1.3740 0 1.3779 0 1.3818 0 1.3858 0 1.3897 0 1.3936 0 1.3976 0 1.4015 0 1.4054 0 1.4094 0 1.4133 0 1.4173 0 1.4212 0 1.4251 0 1.4291 0 1.4330 0 1.4369 0 1.4409 0 1.4448 0 1.4488 0 1.4527 0 1.4566 0 1.4606 0 1.4645 0 1.4684 0 1.4724 0 1.4763 0 1.4802 0 1.4842 0 1.4881 0 1.4921 0 1.4960 0 1.4999 0 1.5039 0 1.5078 0 1.5117 0 1.5157 0 1.5196 0 1.5236 0 1.5275 0 1.5314 0 1.5354 0 1.5393 0 1.5432 0 1.5472 0 1.5511 0 1.5550 0 1.5590 0 1.5629 0 1.5669 0 1.5708 But i want to modify this function so that it can two lists like: trajectory([x1, x2, x3, ... xn], [phi1, phi2, phi3, ..., phin]) and create a matrix like this: trajectory = x1 0 x1+k 0 . 0 . 0 x1_n 0 0 phi1 0 phi1+k 0 . 0 . 0 phi1_n x2 0 x2+k 0 . 0 . 0 x2_n 0 0 phi2 0 phi2+k 0 . 0 . 0 phi2_n and so on. So I was wandering if there was a more automatic way expanding the matrix, so that two lists can be provided as an input argument and the matrix expanding according to the elements of the list.
function p = matr(x, phi) p = zeros(800*length(x), 2); for ii = 1:length(x) x_dir = linspace(0, x(ii), 400); r = linspace(0, phi(ii), 400); p((800*(ii-1)+1):(800*(ii-1)+400), 1) = x_dir; p((800*ii-399):(800*ii), 2) = r; end end OR function p2 = matr_compound(x, phi) p2 = []; for ii = 1:length(x) p2 = [p2; matr(x(ii), phi(ii))]; end end
How to split 5D data matrix in several parts
I have one 5D data matrix containing values (:,:,1,1,1), (:,:,1,1,2),.....(:,:,1,1,10) with 57*92 elements each. I want to split this matrix into 10 matrices containing values (:,:,1,1,1) 57*92 in first matrix, (:,:,1,1,2) 57*92 in another matrix and so on. I am using Matlab. The file looks as (have copied little part of it): val(:,:,1,1,1) = Columns 1 through 11 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 14637 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 14637 14637 0 0 0 0 0 0 0 14638 14608 14621 14637 14637 0 0 0 0 0 0 14653 14617 14608 14608 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 0 0 0 0 14581 14581 14581 0 14606 14606 0 0 0 0 0 0 14581 14581 14581 14604 14606 14606 0 0 0 0 0 0 0 0 14603 14606 14605 14596 14596 0 0 0 0 0 0 14604 14604 0 14595 14596 14596 0 0 0 0 0 0 0 0 0 14590 14590 0 0 0 0 0 0 0 14598 14598 14597 14595 14594 0 0 0 0 0 0 0 14598 14598 14587 14590 0 0 0 0 0 0 0 0 0 14570 14570 14570 0 0 0 0 0 0 0 0 0 14570 14570 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 14627 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14620 0 0 0 0 0 0 0 0 0 0 14619 14620 0 0 0 0 14598 14598 14598 0 0 14612 14611 14612 0 0 0 0 14598 14598 14598 0 14613 14606 14607 14609 0 0 0 0 0 0 0 0 0 14609 14609 14608 14599 0 0 0 0 0 14581 14598 14601 0 0 14599 14599 0 0 0 0 14581 14588 14601 14601 0 14581 14584 14587 0 0 0 14586 14581 14597 14601 14591 14589 14575 14575 0 0 0 14598 0 0 0 14590 14589 14589 0 0 0 0 14597 14595 14580 0 0 14594 14594 14594 0 0 0 14587 14581 14582 14580 14581 14582 14594 14594 0 0 0 14615 14609 14593 14587 14583 14586 14592 14594 0 0 0 14630 14633 14629 14602 14610 14628 14605 14602 0 0 0 14645 14649 14650 14645 14640 14634 14630 14616 14610 14606 14593 14659 14663 14667 14677 14642 14645 14642 14634 14607 14606 0 14662 14662 0 14702 14702 14687 14649 14641 14621 14621 0 0 0 0 0 14689 14691 14667 14650 14627 14621 14621 14646 14633 14640 14685 14681 14677 14679 0 0 0 14646 14647 14635 14630 14660 14685 14667 14656 14634 14624 14624 0 14602 14619 14619 14620 14643 14644 14640 14639 14623 14623 0 14578 14567 14597 14601 14614 14643 14639 14636 14621 14619 14623 14574 14568 14571 14583 14590 0 0 0 14592 14592 14593 14575 14566 14564 14572 14576 0 0 0 0 14592 14592 14576 14571 14560 14558 0 0 0 0 0 0 0 0 0 14561 14560 0 0 0 0 0 0 0 Columns 12 through 22
You can do this, it will create N matrices, with the naming scheme M_number, where number goes from 1 to N: % Create dummy 5D matrix val = zeros(57,92,1,1,10); % Create N matrices N = 10; for i = 1:N eval(sprintf('M_%d = val(:,:,1,1,%d);', i, i)); end
linear table to matrix format
I would like to convert a linear table to a matrix format. My input table looks like this and is called "linear_table.tab": transcript ortho Transcript_1 ORTHO_1 Transcript_2 ORTHO_2 Transcript_3 ORTHO_3 Transcript_4 ORTHO_4 Transcript_5 ORTHO_5 Transcript_6 ORTHO_6 Transcript_7 ORTHO_5 Transcript_8 ORTHO_1 Transcript_9 ORTHO_4 Transcript_10 ORTHO_5 Transcript_11 ORTHO_2 Transcript_12 ORTHO_7 Transcript_13 ORTHO_8 Transcript_14 ORTHO_5 Transcript_15 ORTHO_2 Transcript_16 ORTHO_9 what I would like my matrix table to look like: Transcript_1 Transcript_2 Transcript_3 Transcript_4 Transcript_5 Transcript_6 Transcript_7 Transcript_8 Transcript_9 Transcript_10 Transcript_11 Transcript_12 Transcript_13 Transcript_14 Transcript_15 Transcript_16 Transcript_1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 Transcript_2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 Transcript_3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_4 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 Transcript_5 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 Transcript_6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_7 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 Transcript_8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_9 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_10 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 Transcript_11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_14 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 Transcript_15 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Transcript_16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Here is my code using R: linear.table <- read.table("linear_table.tab", header=T, sep="\t") library(reshape2) dcast(linear.table, transcript~ortho, fill=0) I get the following output in R: transcript ORTHO_1 ORTHO_2 ORTHO_3 ORTHO_4 ORTHO_5 ORTHO_6 ORTHO_7 ORTHO_8 ORTHO_9 Transcript_1 ORTHO_1 0 0 0 0 0 0 0 0 Transcript_10 0 0 0 0 ORTHO_5 0 0 0 0 Transcript_11 0 ORTHO_2 0 0 0 0 0 0 0 Transcript_12 0 0 0 0 0 0 ORTHO_7 0 0 Transcript_13 0 0 0 0 0 0 0 ORTHO_8 0 Transcript_14 0 0 0 0 ORTHO_5 0 0 0 0 Transcript_15 0 ORTHO_2 0 0 0 0 0 0 0 Transcript_16 0 0 0 0 0 0 0 0 ORTHO_9 Transcript_2 0 ORTHO_2 0 0 0 0 0 0 0 Transcript_3 0 0 ORTHO_3 0 0 0 0 0 0 Transcript_4 0 0 0 ORTHO_4 0 0 0 0 0 Transcript_5 0 0 0 0 ORTHO_5 0 0 0 0 Transcript_6 0 0 0 0 0 ORTHO_6 0 0 0 Transcript_7 0 0 0 0 ORTHO_5 0 0 0 0 Transcript_8 ORTHO_1 0 0 0 0 0 0 0 0 Transcript_9 0 0 0 ORTHO_4 0 0 0 0 0 I am not sure how to proceed in this aspect using R.
Using awk: $ cat ortho.awk NR > 1 { transcript = $1; ortho = $2; i = transcript; j = ortho; sub("Transcript_", "", i); sub("ORTHO_", "", j); imx[i][j] = 1; } END { for (i in imx) { for (j in imx) { omx["Transcript_"+i]["Transcript_"+j] = imx[i][j] == "" ? 0 : 1; } } printf("\t"); for (i in omx) { printf "\tTranscript%d", i; } print ""; for (i in omx) { printf "Transcript%d", i; for (j in omx) { printf "\t%d", omx[i][j]; } print ""; } } Idea is to populate a sparse matrix of 1's, then at the end fill it with 0's in the missing spots. Then print it out.
Random numbers over periods (Using logical)
With the code below: t=10; period=9; A=zeros(36,36,t); for j=1:t A(7:period:end,7:period:end,j)=rand(1,1); A(8:period:end,8:period:end,j)=rand(1,1); A(9:period:end,9:period:end,j)=rand(1,1); end Edit: This is A. I've split them up into 9x9 visually so it's easier to see the pattern. 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 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 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 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 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 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 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 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 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 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 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 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 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 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 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 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 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 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 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 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 I'd like to make every single number which is labelled 1, a random number between 0 to 1. Is it necessary to create a vector(48,1) and then plug in the values where the 1s are? Of course the numbers are not entirely random, the same three random numbers are being reproduced every ''period''. Is there a simple way that can create random numbers so every single randomnly generated value is random? Many thanks.
It was slightly trickier than I thought at first. Here's my solution though: A = zeros(36,36,t); idx = sub2ind([36 36 t],repmat(34:36,1,t),repmat(34:36,1,t),repmat(1:t,1,3)); A(idx) = rand(length(idx),1); The solution with logical indexing is: A(logical(A)) = rand(nnz(A),1); But you have to prepare A as the binary matrix given in the question.
How can I read this text file to matrix with MATLAB? [closed]
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 11 years ago. 0 1 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 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 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 1 0 1 0 0 1 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 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 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 1 0 1 1 1 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 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 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 1 0 1 1 1 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 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 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 1 1 0 1 1 1 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 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 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 1 1 1 1 0 1 1 1 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 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 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 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 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 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 1 1 1 0 1 1 1 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 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 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 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
% read in data fid = fopen('filepath'); data = textscan(fid,'%f%f%f%f','HeaderLines',2,'CollectOutput',1); data = data{:}; fid = fclose(fid); % retrieve column 1 data(:,1) % Number of rows size(data,1) http://www.mathworks.com/matlabcentral/answers/3294-read-text-file-into-a-matrix You may have to adapt the code a bit for your particular data file.
Just put brackets around the whole thing, and set it equal to a variable: myData = [0 0 1 0 ... ];