From: Mathieu Bouchard Date: 2006-03-11T13:30:43+09:00 Subject: Re: how to introduce reference objects into ruby On Fri, 10 Mar 2006, Geert Fannes wrote: > E.g., I am analyzing call-networks, data from a telecom firm that > contains the call durations for its customers, which can be represented > with a matrix: element (i,j) is the duration that j calls i. Since not > everybody calls to everybody, it would be a silly waste of space to > store all the zero call durations between people who did not make any > calls (and impossible to find a machine that can store all this info). yeah, that amounts to a consider the matrix as the adjacency matrix of a weighted digraph and then re-represent it using adjacency lists. > To implement this, you basically have to store each column using a Hash > instead of an Array. You don't have to make it asymmetric, and then, to get symmetry, you don't have to keep two transposed asymmetric copies of the graph. Instead, partition both your vectorspaces as direct sums of smaller vectorspaces: then the big matrix will be made of many small matrices, and each small matrix may be elided if equal to zero; pick the partition such that you get a good space saving (DON'T try to find the optimal space-saving). My first guess would be to try direct sums of sqrt(N) components of dimension sqrt(N) each. > To summorize, when you have a LOT of Ruby objects that should be > accessed from different places (like the columns and row-wise access in > a sparse matrix as explained above), Ruby is not very usefull. For my work I only deal with nonsparse matrices and even though I use Ruby a lot, almost all of the matrix stuff is done in C++ for efficiency. > Anyway, can you explain why you consider a reference object as a > "mis-feature"? All sorts of opinions can be invented and propagated if there are enough people willing to believe in them and a social network that is appropriate for sustaining a feedback loop of cognitive consonance. _ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - t�l:+1.514.383.3801 - http://artengine.ca/matju | Freelance Digital Arts Engineer, Montr�al QC Canada