Advertisement
Guest User

SOM ANN R script -edited

a guest
Jun 23rd, 2015
331
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. somPEs <- 36 # user defined constant specific to dataset dimensionality
  2. inputPEs <- 6; # arbitrary constant specific to dataset dimensionality
  3. hm <- matrix(c(c(1:8),rep(0,somPEs-length(c(1:8)))), nrow=sqrt(somPEs), ncol=sqrt(somPEs))
  4. hm2 <- as.vector(matrix(hm, byrow=TRUE))
  5. initial_w <- matrix(1, nrow=somPEs, ncol=inputPEs)
  6. w <- t(apply(initial_w, 1, function(i) runif(i)));
  7.  
  8. # Do fences, weight distances.
  9. fence_edges = matrix(0, nrow=somPEs, ncol=4); # cols are top, bottom, left, right borders of each somPE
  10. fence_diagonals = matrix(0, nrow=somPEs, ncol=4); # cols are top left, top right, bottom left, bottom right
  11. # Reshape w to a 3D matrix of dimension: c(sqrt(somPEs), sqrt(somPEs), inputPEs)
  12. dim(w) <- c(sqrt(somPEs), sqrt(somPEs), inputPEs)
  13. w <- aperm(w, c(2, 1, 3))
  14.  
  15. # Plot weight distance between adjacent somPEs in all directions in grayscale
  16. it = 1;
  17. for (i in 1:sqrt(somPEs)) {
  18. for (j in 1:sqrt(somPEs)) {
  19. if (i>1 && i<sqrt(somPEs)) {
  20. if (j>1 && j<sqrt(somPEs)) {
  21. for (k in 1:inputPEs) {
  22. fence_edges[it,1] = fence_edges[it,1] + dist(rbind(w[i,j,k], w[i-1,j,k]));
  23. fence_edges[it,2] = fence_edges[it,2] + dist(rbind(w[i,j,k], w[i+1,j,k]));
  24. fence_edges[it,3] = fence_edges[it,3] + dist(rbind(w[i,j,k], w[i,j-1,k]));
  25. fence_edges[it,4] = fence_edges[it,4] + dist(rbind(w[i,j,k], w[i,j+1,k]));
  26. fence_diagonals[it,1] = fence_diagonals[it,1] + dist(rbind(w[i,j,k], w[i-1,j-1,k]));
  27. fence_diagonals[it,2] = fence_diagonals[it,2] + dist(rbind(w[i,j,k], w[i-1,j+1,k]));
  28. fence_diagonals[it,3] = fence_diagonals[it,3] + dist(rbind(w[i,j,k], w[i+1,j-1,k]));
  29. fence_diagonals[it,4] = fence_diagonals[it,4] + dist(rbind(w[i,j,k], w[i+1,j+1,k]));
  30. }
  31. } else if (j==1) {
  32. for (k in 1:inputPEs) {
  33. fence_edges[it,1] = fence_edges[it,1] + dist(rbind(w[i,j,k], w[i-1,j,k]));
  34. fence_edges[it,2] = fence_edges[it,2] + dist(rbind(w[i,j,k], w[i+1,j,k]));
  35. fence_edges[it,4] = fence_edges[it,4] + dist(rbind(w[i,j,k], w[i,j+1,k]));
  36. fence_diagonals[it,2] = fence_diagonals[it,2] + dist(rbind(w[i,j,k], w[i-1,j+1,k]));
  37. fence_diagonals[it,4] = fence_diagonals[it,4] + dist(rbind(w[i,j,k], w[i+1,j+1,k]));
  38. }
  39. } else { # j==10
  40. for (k in 1:inputPEs) {
  41. fence_edges[it,1] = fence_edges[it,1] + dist(rbind(w[i,j,k], w[i-1,j,k]));
  42. fence_edges[it,2] = fence_edges[it,2] + dist(rbind(w[i,j,k], w[i+1,j,k]));
  43. fence_edges[it,3] = fence_edges[it,3] + dist(rbind(w[i,j,k], w[i,j-1,k]));
  44. fence_diagonals[it,1] = fence_diagonals[it,1] + dist(rbind(w[i,j,k], w[i-1,j-1,k]));
  45. fence_diagonals[it,3] = fence_diagonals[it,3] + dist(rbind(w[i,j,k], w[i+1,j-1,k]));
  46. }
  47. }
  48. } else if (i==1) {
  49. if (j>1 && j<sqrt(somPEs)) {
  50. for (k in 1:inputPEs) {
  51. fence_edges[it,2] = fence_edges[it,2] + dist(rbind(w[i,j,k], w[i+1,j,k]));
  52. fence_edges[it,3] = fence_edges[it,3] + dist(rbind(w[i,j,k], w[i,j-1,k]));
  53. fence_edges[it,4] = fence_edges[it,4] + dist(rbind(w[i,j,k], w[i,j+1,k]));
  54. fence_diagonals[it,3] = fence_diagonals[it,3] + dist(rbind(w[i,j,k], w[i+1,j-1,k]));
  55. fence_diagonals[it,4] = fence_diagonals[it,4] + dist(rbind(w[i,j,k], w[i+1,j+1,k]));
  56. }
  57. } else if (j==1) {
  58. for (k in 1:inputPEs) {
  59. fence_edges[it,2] = fence_edges[it,2] + dist(rbind(w[i,j,k], w[i+1,j,k]));
  60. fence_edges[it,4] = fence_edges[it,4] + dist(rbind(w[i,j,k], w[i,j+1,k]));
  61. fence_diagonals[it,4] = fence_diagonals[it,4] + dist(rbind(w[i,j,k], w[i+1,j+1,k]));
  62. }
  63. } else { # j==10
  64. for (k in 1:inputPEs) {
  65. fence_edges[it,2] = fence_edges[it,2] + dist(rbind(w[i,j,k], w[i+1,j,k]));
  66. fence_edges[it,3] = fence_edges[it,3] + dist(rbind(w[i,j,k], w[i,j-1,k]));
  67. fence_diagonals[it,3] = fence_diagonals[it,3] + dist(rbind(w[i,j,k], w[i+1,j-1,k]));
  68. }
  69. }
  70. } else { # i==10
  71. if (j>1 && j<sqrt(somPEs)) {
  72. for (k in 1:inputPEs) {
  73. fence_edges[it,1] = fence_edges[it,1] + dist(rbind(w[i,j,k], w[i-1,j,k]));
  74. fence_edges[it,3] = fence_edges[it,3] + dist(rbind(w[i,j,k], w[i,j-1,k]));
  75. fence_edges[it,4] = fence_edges[it,4] + dist(rbind(w[i,j,k], w[i,j+1,k]));
  76. fence_diagonals[it,1] = fence_diagonals[it,1] + dist(rbind(w[i,j,k], w[i-1,j-1,k]));
  77. fence_diagonals[it,2] = fence_diagonals[it,2] + dist(rbind(w[i,j,k], w[i-1,j+1,k]));
  78. }
  79. } else if (j==1) {
  80. for (k in 1:inputPEs) {
  81. fence_edges[it,1] = fence_edges[it,1] + dist(rbind(w[i,j,k], w[i-1,j,k]));
  82. fence_edges[it,4] = fence_edges[it,4] + dist(rbind(w[i,j,k], w[i,j+1,k]));
  83. fence_diagonals[it,2] = fence_diagonals[it,2] + dist(rbind(w[i,j,k], w[i-1,j+1,k]));
  84. }
  85. } else { # j==10
  86. for (k in 1:inputPEs) {
  87. fence_edges[it,1] = fence_edges[it,1] + dist(rbind(w[i,j,k], w[i-1,j,k]));
  88. fence_edges[it,3] = fence_edges[it,3] + dist(rbind(w[i,j,k], w[i,j-1,k]));
  89. fence_diagonals[it,1] = fence_diagonals[it,1] + dist(rbind(w[i,j,k], w[i-1,j-1,k]));
  90. }
  91. }
  92. }
  93. it=it+1;
  94. }
  95. }
  96. mxEdges = max(max(fence_edges));
  97. mxDiagonals = max(max(fence_diagonals));
  98. fence_edges = fence_edges/mxEdges;
  99. fence_diagonals = fence_diagonals/mxDiagonals;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement