linear table to matrix format - text-processing

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.

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

Comparison between two rows and change value

i have a matrix 20 rows and 20 columns,
If the value 1 in the row 5 the column take 0
matric=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ;
0 1 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 1;
0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 1 0 1;
0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;];
if (matric(5,:)==1)
matric(1:5,1:end)=0;end
I try to compare the second row and the 5 row
If we have "1" in row 2 and row 5
The row 2 take 0
if (matric(5,:)==matric(2,:)==1)
matric(2,1:end)=0;end
do you have an idea
Thank you
The desired output is:
matric=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
1 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 1 0 ;2row will change
0 1 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 1;
0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 1 0 1;
0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 1; % 5 row
You can use logical indexing.
I strongly encourage you to read the following references:
Mathworks documentation page: Find Array Elements That Meet a Condition
Loren on the Art of MATLAB blog entry: Logical Indexing – Multiple
Conditions
Use the following lines of code:
Put 0 in all those columns that have a value of 1 in row 5:
matric(:, matric(5, :) == 1) = 0;
Put 0 in all those columns of row 2 that have a value of 1 both in rows 2 and 5:
matric(2, matric(2, :) == matric(5, :)) = 0;
You can use logical indexing to achieve this. Now I must say I am a bit confused by what exactly you want to achieve based on your description, but based on the your code the first statement can be done as follow:
matric(1:5,matric(5,:)==1) = 0;
and the second would look like:
matric(2,matric(5,:)==1 & matric(2,:)==1)=0;

Flipping Around 5 percent of 1's and 0's

For the following letter, I wish to add noise to it by changing 5 percent of the 1's into 0's. So far, I have the following code which turns them all into 0's. Can someone please point me in the right direction? Thank you!
letterA = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 0 0 0 0 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 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 1 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 1 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 1 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 0 0 0 0 0 1 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 0 0 0 1 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 0 1 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 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 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 1 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 0 1 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 0 0 0 1 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 0 0 0 0 0 1 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 0 0 0 0 0 0 0 1 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 1 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 1 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 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];
for i=1:numel(letterA)
if letterA(i)==1
letterA(i)=0;
end
end
disp(letterA)
try this:
letterA( letterA == 1 & rand(size(letterA)) <= 0.05 ) = 0;
In fact you could also do
letterA( rand(size(letterA)) <= 0.05 ) = 0;
which sets each element with probability of 5% to zero. The already zero elements are not affected. I think what causes confusion here is that you have to recognize that each element is independently handled from each other. It makes no difference if you do the first or the second version.
You can check it:
letterA = (rand(1e5,1) < 0.2); N1 = nnz(letterA);
letterA( rand(size(letterA)) <= 0.05 ) = 0;
(N1 - nnz(letterA))/N1
which gives values around 0.05, i.e. 5%. And it is not true what EitanT says, that it will flip at maximum 5%. It can be more than 5% or less, but on average it is 5%.
EitanTs version flippes exactly 5%, so which version to select depends on the application. For EitanT version the noise is correlated to the signal (because it is exact), which may or may not be what you want.
The basic approach is to find the indices of the 1's and count them, randomly pick a desired amount of indices out of them, and then operate on them:
one_flip_ratio = 0.05;
idx_ones = find(letterA == 1); %// Indices of 1's
flips = round(one_flip_ratio * numel(idx_ones)); %// Number of flips
idx_flips = idx_ones(randperm(numel(idx_ones), flips)); %// Indices of elements
letterA(idx_flips) = 0; %// Flip elements
This will flip 5% of the 1's to 0's.
Thanks for throwing out all these ideas, but eventually I came up with this. It will allow me to easily control both letter and background noise, which is what I intend to do. I'm just a novice, so this may not be the most efficient code, but it gets the job done! (I'm not looking for exactly 5%, the naked eye display value is what I'm more worried about.) PLEASE let me know how this can be improved! Thank you.
background_noise_intensity=0.05;
letter_noise_intensity=0.05;
for i=1:numel(letterA)
if letterA(i)==0
if rand < background_noise_intensity
letterA(i)=1;
end
elseif letterA(i)==1
if rand < letter_noise_intensity
letterA(i)=0;
end
end
end
noisy_letters=letterA;
reshaped_noisy_letters=reshape(noisy_letters,37,19)';
imshow(reshaped_noisy_letters);

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 ... ];