File tree Expand file tree Collapse file tree 3 files changed +93
-1
lines changed Expand file tree Collapse file tree 3 files changed +93
-1
lines changed Original file line number Diff line number Diff line change 1
1
# Reorder.js
2
2
3
- [ Reorder.js] ( http://www.reorderjs.org/ ) is a JavaScript library for reordering matrices.
3
+ [ Reorder.js] ( https://github.com/jdfekete/reorder.js/ ) is a JavaScript library for reordering matrices.
4
+
5
+ Want to learn more? [ See the wiki.] ( https://github.com/jdfekete/reorder.js/wiki )
4
6
5
7
## Development
6
8
Original file line number Diff line number Diff line change
1
+ // Converts a graph with weighted edges (weight in l.value)
2
+ // into a distance matrix suitable for reordering with e.g.
3
+ // Optimal Leaf Ordering.
4
+
5
+ function distmat2valuemat ( distmat ) {
6
+ var n = distmat . length ,
7
+ valuemat = reorder . zeroes ( n , n ) ,
8
+ max_dist = reorder . distmax ( distmat ) ,
9
+ i , j ;
10
+
11
+ for ( i = 0 ; i < n ; i ++ ) {
12
+ for ( j = i ; j < n ; j ++ ) {
13
+ valuemat [ j ] [ i ] = valuemat [ i ] [ j ] = 1 + max_dist - distmat [ i ] [ j ] ;
14
+ }
15
+ }
16
+ return valuemat ;
17
+ }
18
+ reorder . distmat2valuemat = distmat2valuemat ;
19
+
20
+ reorder . graph2valuemats = function ( graph , comps ) {
21
+ if ( ! comps )
22
+ comps = graph . components ( ) ;
23
+
24
+ var dists = reorder . all_pairs_distance ( graph , comps ) ;
25
+ return dists . map ( distmat2valuemat ) ;
26
+ } ;
27
+
28
+ reorder . valuemats_reorder = function ( valuemats , leaforder , comps ) {
29
+ var orders = valuemats . map ( leaforder ) ;
30
+
31
+ if ( comps ) {
32
+ orders = orders . map ( function ( d , i ) {
33
+ return reorder . permute ( comps [ i ] , d ) ;
34
+ } ) ;
35
+ }
36
+ return orders . reduce ( reorder . flatten ) ;
37
+ } ;
Original file line number Diff line number Diff line change
1
+ require ( "science" ) ;
2
+ require ( "../reorder.v1" ) ;
3
+ require ( "../reorder.v1" ) ;
4
+
5
+ var vows = require ( "vows" ) ,
6
+ assert = require ( "assert" ) ;
7
+ var seedrandom = require ( 'seedrandom' ) ;
8
+ Math . seedrandom ( 'reorder' ) ;
9
+
10
+ var suite = vows . describe ( "reorder.graph2distmat" ) ;
11
+
12
+ suite . addBatch ( {
13
+ "graph2distmat" : {
14
+ "simple" : function ( ) {
15
+ var mat = [
16
+ [ 0 , 1 , 0 ] ,
17
+ [ 1 , 0 , 1 ] ,
18
+ [ 0 , 1 , 0 ]
19
+ ] ,
20
+ dist = [
21
+ [ 0 , 1 , 2 ] ,
22
+ [ 1 , 0 , 1 ] ,
23
+ [ 2 , 1 , 0 ]
24
+ ] ;
25
+ var graph = reorder . mat2graph ( mat ) ;
26
+ assert . equal ( graph . nodes ( ) . length , 3 ) ;
27
+ assert . equal ( graph . links ( ) . length , 2 ) ;
28
+ var dists = reorder . all_pairs_distance ( graph ) ;
29
+ assert . deepEqual ( dists [ 0 ] , dist ) ;
30
+ var valuemat = reorder . distmat2valuemat ( dist ) ;
31
+ assert . deepEqual ( valuemat ,
32
+ [ [ 3 , 2 , 1 ] ,
33
+ [ 2 , 3 , 2 ] ,
34
+ [ 1 , 2 , 3 ] ] ) ;
35
+ // var max_link = graph.links().reduce(
36
+ // function(a, b) {
37
+ // return a.value > b.value ? a : b;
38
+ // }),
39
+ // max_value = max_link ? max_link.value : 0;
40
+ // var links = graph.links()
41
+ // .map(function(l) {
42
+ // return {
43
+ // value: (max_value - l.value)/max_value,
44
+ // source: l.source.index,
45
+ // target: l.target.index
46
+ // };
47
+ // });
48
+ // console.log(links);
49
+ }
50
+ }
51
+ } ) ;
52
+
53
+ suite . export ( module ) ;
You can’t perform that action at this time.
0 commit comments