The SimilarityMatrix is meant to work with one set of elements, which is the same in column and horizontal.
Instead of having one class, SimilarityMatrix, we should have a framework to easily build matrixes. In your case, you simply want a matrix with a smart way of coloring. I am interesting in having such matrix. How do we proceed? Are you ready for a pair programming session these next days? I am now in Lille by the way, where are you? Alexandre On Dec 15, 2013, at 9:29 PM, Hernán Morales Durand <[email protected]> wrote: > El 15/12/2013 13:30, Alexandre Bergel escribió: >> Hi Hernan, >> >> In that case, I suggest you to define your own builder to build the >> matrix you need. >> I have given a try, but I cannot properly parse your data. The problem >> is about separating column (is it 4 or 5 white spaces?). Having a “,” >> would help. > > That should be a paste problem, matrix elements were delimited by tab. > > I was thinking more in terms of re-using the SimilarityMatrix by making it > polymorphic with a Matrix, i.e.: > > | rawDataMatrix dataMatrix rowArray | > rawDataMatrix := '1,0.130,0.132,0.130 > ,1,0.195,0.487 > ,,1,0.195 > ,,,1'. > " Build an Array for joining all rows in raw data matrix " > rowArray := (NeoCSVReader on: rawDataMatrix readStream) upToEnd gather: [ : c > | c ]. > " Then create a Matrix " > dataMatrix := Matrix new rows: 4 columns: 4 contents: rowArray. > " Instead of passing a comparison block, let's just take the values in the > data matrix " > SimilarityMatrix new on: dataMatrix; viewMatrix > > >> >> I gave a try, as you can see with the script below. It produces the >> following: >> >> >> Each box gives its value when the mouse is above. >> >> -=-=-= -=-=-= -=-=-= -=-=-= -=-=-= >> | view f blockSize shape values el | >> values := ' a1 a2 a3 a4 a5 a6 a7 a8 a9 >> a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 >> a20 a21 >> a1 1 0.130 0.132 0.130 0.158 0.189 0.130 0.022 >> 1.000 0.062 0.083 0.061 0.080 0.059 0.149 1.000 >> 0.098 0.161 0.109 1.000 >> a2 1 0.195 0.487 0.220 0.220 1.000 0.060 >> 0.130 0.118 0.234 0.234 0.224 0.200 0.622 0.130 >> 0.342 0.235 0.425 0.130 0.000 >> a3 1 0.195 0.464 0.464 0.195 0.073 0.132 >> 0.116 0.114 0.256 0.109 0.085 0.133 0.132 0.105 >> 0.320 0.171 0.132 0.000 >> a4 1 0.220 0.190 0.487 0.060 0.130 >> 0.118 0.160 0.234 0.154 0.132 0.395 0.130 0.342 >> 0.235 0.425 0.130 0.000 >> a5 1 0.500 0.220 0.071 0.158 0.195 >> 0.220 0.389 0.209 0.182 0.156 0.158 0.162 0.417 >> 0.225 0.158 0.000 >> a6 1 0.220 0.071 0.189 0.114 >> 0.136 0.282 0.130 0.106 0.156 0.189 0.132 0.360 >> 0.167 0.189 0.000 >> a7 1 0.060 0.130 0.118 >> 0.234 0.234 0.224 0.200 0.622 0.130 0.342 0.235 >> 0.425 0.130 0.000 >> a8 1 0.022 0.156 0.104 >> 0.082 0.100 0.100 0.019 0.022 0.095 0.088 0.061 >> 0.022 0.028 >> a9 1 0.062 0.083 >> 0.061 0.080 0.059 0.149 1.000 0.098 0.161 0.109 >> 1.000 0.000 >> a10 1 0.541 0.140 >> 0.372 0.283 0.073 0.062 0.111 0.139 0.143 0.062 >> 0.025 >> a11 1 0.160 >> 0.714 0.579 0.176 0.083 0.133 0.200 0.163 0.083 >> 0.024 >> a12 1 0.154 >> 0.132 0.176 0.061 0.308 0.235 0.239 0.061 0.000 >> a13 1 >> 0.676 0.170 0.080 0.128 0.189 0.157 0.080 0.023 >> a14 >> 1 0.148 0.059 0.128 0.158 0.135 0.059 0.023 >> a15 >> 1 0.149 0.262 0.158 0.341 0.149 0.000 >> a16 >> 1 0.098 0.161 0.109 1.000 0.000 >> a17 >> 1 0.207 0.316 0.098 0.000 >> a18 >> 1 0.206 0.161 0.000 >> a19 >> 1 0.109 0.000 >> a20 >> 1 0.000 >> a21 >> 1 >> ' lines collect: [ : line | line trimBoth findTokens: ' ' ]. >> >> >> blockSize := 10. >> view := ROView new. >> values do: [ :lineOfValues | >> lineOfValues do: [ :v | >> shape := ROBox new size: blockSize; color: Color white. >> f := [Float readFrom: v readStream] ifError: [ -1 ]. >> f >= 0 >> ifTrue: [ shape color: (Color gray: f) ]. >> el := shape elementOn: f. >> el @ ROPopup. >> view add: el >> ]. >> >> "We fill the remaining of the line with white boxes. >> We need to have the same amount of boxes for all the lines" >> (values first size - lineOfValues size) >> timesRepeat: [ view add: (ROBox new color: Color white) element ]. >> >> ]. >> ROGridLayout new gapSize: 0; lineItemsCount: (values first size); on: >> view elements. >> view open. >> -=-=-= -=-=-= -=-=-= -=-=-= -=-=-= >> >> > > Thanks for the script. > Hernán > > > >> >> >> Cheers, >> Alexandre >> >> >> >> >> On Dec 15, 2013, at 12:56 AM, Hernán Morales Durand >> <[email protected] <mailto:[email protected]>> wrote: >> >>> Hi Alexandre, >>> >>> Just to provide you some feedback. My similarity matrices sometimes >>> are calculated by other tools. However I want to display them using >>> Roassal. For example this is a similarity matrix of 21 lines and 21 >>> columns: >>> >>> ' a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 >>> a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 >>> a1 1 0.130 0.132 0.130 0.158 0.189 0.130 0.022 >>> 1.000 0.062 0.083 0.061 0.080 0.059 0.149 >>> 1.000 0.098 0.161 0.109 1.000 0.000 >>> a2 1 0.195 0.487 0.220 0.220 1.000 0.060 >>> 0.130 0.118 0.234 0.234 0.224 0.200 0.622 0.130 >>> 0.342 0.235 0.425 0.130 0.000 >>> a3 1 0.195 0.464 0.464 0.195 0.073 >>> 0.132 0.116 0.114 0.256 0.109 0.085 0.133 0.132 >>> 0.105 0.320 0.171 0.132 0.000 >>> a4 1 0.220 0.190 0.487 0.060 0.130 >>> 0.118 0.160 0.234 0.154 0.132 0.395 0.130 0.342 >>> 0.235 0.425 0.130 0.000 >>> a5 1 0.500 0.220 0.071 0.158 >>> 0.195 0.220 0.389 0.209 0.182 0.156 0.158 0.162 >>> 0.417 0.225 0.158 0.000 >>> a6 1 0.220 0.071 0.189 0.114 >>> 0.136 0.282 0.130 0.106 0.156 0.189 0.132 0.360 >>> 0.167 0.189 0.000 >>> a7 1 0.060 0.130 0.118 >>> 0.234 0.234 0.224 0.200 0.622 0.130 0.342 0.235 >>> 0.425 0.130 0.000 >>> a8 1 0.022 0.156 0.104 >>> 0.082 0.100 0.100 0.019 0.022 0.095 0.088 >>> 0.061 0.022 0.028 >>> a9 1 0.062 0.083 >>> 0.061 0.080 0.059 0.149 1.000 0.098 0.161 0.109 >>> 1.000 0.000 >>> a10 1 0.541 >>> 0.140 0.372 0.283 0.073 0.062 0.111 0.139 0.143 >>> 0.062 0.025 >>> a11 1 0.160 >>> 0.714 0.579 0.176 0.083 0.133 0.200 0.163 0.083 >>> 0.024 >>> a12 1 >>> 0.154 0.132 0.176 0.061 0.308 0.235 0.239 0.061 >>> 0.000 >>> a13 1 >>> 0.676 0.170 0.080 0.128 0.189 0.157 0.080 0.023 >>> a14 >>> 1 0.148 0.059 0.128 0.158 0.135 0.059 0.023 >>> a15 >>> 1 0.149 0.262 0.158 0.341 0.149 0.000 >>> a16 >>> 1 0.098 0.161 0.109 1.000 0.000 >>> a17 >>> 1 0.207 0.316 0.098 0.000 >>> a18 >>> 1 0.206 0.161 0.000 >>> a19 >>> 1 0.109 0.000 >>> a20 >>> 1 0.000 >>> a21 >>> 1 >>> ' lines collect: [ : line | line trimBoth findTokens: Character tab ] >>> >>> May be your Comparison class could be tailored to set manually rhs, >>> lhs and similarity? What do you recommend for raw matrices? >>> >>> Cheers, >>> >>> Hernán >>> >>> >>> >>> 2013/11/29 Alexandre Bergel <[email protected] >>> <mailto:[email protected]>> >>> Hi! >>> >>> I know some of you are working on DSM-kind of matrix. Oscar has been >>> working on a similarity matrix for Roassal. I just want to share a >>> self-explanble screenshot with you guys. >>> >>> >>> On this example, the methods of the subclasses of Set are compared >>> between themselves. >>> Black dot is a couple (m1, m2) that are very similar >>> <Screen Shot 2013-11-29 at 6.12.39 PM.png> >>> >>> More >>> on >>> https://www.facebook.com/media/set/?set=a.550677725018829.1073741833.340543479365589&type=1 >>> >>> Cheers, >>> Alexandre >>> -- >>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: >>> Alexandre Bergel http://www.bergel.eu >>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >>> >>> >>> >>> >> >> -- >> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: >> Alexandre Bergel http://www.bergel.eu >> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;. >> >> >> > > -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;: Alexandre Bergel http://www.bergel.eu ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
