<snapdata remixID="14188475"><project name="kmeans" app="Snap! 10.4.6, https://snap.berkeley.edu" version="2"><notes>demonstration of k-means clustering.&#xD;&#xD;turn on turbo mode to make the project run faster. generally it runs 2x faster in turbo mode. turbo mode eliminates drawing the results of each iteration to allow for faster speeds.&#xD;&#xD;in theory this project can be extended to n-dimensional datapoints by changing both the method by which data is displayed and by changing the dimensions of the random point generator.</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="kmeans"><notes>demonstration of k-means clustering.&#xD;&#xD;turn on turbo mode to make the project run faster. generally it runs 2x faster in turbo mode. turbo mode eliminates drawing the results of each iteration to allow for faster speeds.&#xD;&#xD;in theory this project can be extended to n-dimensional datapoints by changing both the method by which data is displayed and by changing the dimensions of the random point generator.</notes><palette><category name="Blocks" color="0,116,143,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="distance of lists %&apos;list1&apos; %&apos;list2&apos;" type="reporter" category="Blocks"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><block s="reportPower"><block s="reportDifference"><block var="list1"/><block var="list2"/></block><l>2</l></block></block></block></block></script></block-definition><block-definition s="distance between elements of %&apos;list1&apos; %&apos;list2&apos;" type="reporter" category="Blocks"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportPower"><block s="reportDifference"><block var="list1"/><block var="list2"/></block><l>2</l></block></block></block></script></block-definition><block-definition s="%&apos;n&apos; random points" type="reporter" category="Blocks"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">20</input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block s="reportQuotient"><block s="reportRandom"><l>0</l><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><l>10</l></block><block s="reportQuotient"><block s="reportRandom"><l>0</l><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block><l>10</l></block></list></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block var="n"/></block></block></block></script></block-definition><block-definition s="label point %&apos;point&apos;" type="reporter" category="Blocks"><comment x="0" y="0" w="90" collapsed="false">returns the index of the cnetroid that a point should belong to</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>sorted</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><custom-block s="distance of lists %l %l"><block var="point"/><block var="value"/></custom-block><block var="index"/></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="centroids"/></block></block></block></block></block></script></block-definition><block-definition s="label dataset %&apos;data&apos;" type="reporter" category="Blocks"><comment x="0" y="0" w="90" collapsed="false">label a list of points</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><custom-block s="label point %l"><block var="value"/></custom-block><block var="index"/></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="data"/></block></block></script></block-definition><block-definition s="geometric mean %&apos;nums&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%n" initial="1"></input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><block s="reportPower"><block var="nums"/><block s="reportQuotient"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="nums"/></block></block></block></block></block></script><scripts><script x="16.77880859375" y="111.86666666666667"><block s="reportMonadic"><l><option>e^</option></l><block s="reportQuotient"><block s="reportMonadic"><l><option>ln</option></l><block var="nums"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="nums"/></block></block></block></script></scripts></block-definition><block-definition s="$flash sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists"><comment x="0" y="0" w="161.14285714285708" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations>ca:ordena _ segons criteri _&#xD;pl:$flash sortuj _ za pomocą _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>lst_sort(list, fn)</l><list><block var="data"/><block var="function"/></list></block></block></script></block-definition><block-definition s="$flash assoc %&apos;key&apos; %&apos;a-list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="289.3333333333333" collapsed="false">The second input is an &quot;association list,&quot; a list of two-item lists.  Each of those smaller lists has a &quot;key&quot; as its first item and a &quot;value&quot; as its second.  ASSOC reports the first key-value pair in the association list whose key matches the first input.</comment><header></header><code></code><translations>ca:associació _ _&#xD;pl:$flash skojarz _ _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block var="key"/><block s="reportListItem"><l>1</l><l/></block></list></block></autolambda><list></list></block><block var="a-list"/></block></block></script></block-definition><block-definition s="%&apos;#&apos; for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><comment x="0" y="0" w="228.57142857142858" collapsed="false">This block carries out the given script for each item of the given list, like the primitive FOR EACH.&#xD;&#xD;What&apos;s different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.</comment><header></header><code></code><translations>ca:_ per cada _ de _ _&#xD;pl:_ dla każdego _ z _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doForEach"><l>inner item</l><block var="data"/><script><block s="doSetVar"><l>item</l><block var="inner item"/></block><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block-definition><block-definition s="☠︎ linked? %&apos;data&apos;" type="predicate" category="lists" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>lst_linked(list)</l><list><block var="data"/></list></block></block></script></block-definition><block-definition s="☠︎ link %&apos;data&apos;" type="reporter" category="lists" helper="true"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><block s="reportCDR"><block var="data"/></block></block></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666666" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).&#xD;&#xD;Will not work on circular lists.</comment><header></header><code></code><translations>ca:notació textual de _&#xD;pl:tekstowa _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportAtomicCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations>ca:frase _&#xD;pl:zdanie _&#xD;</translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="$flash zip %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="192" collapsed="false">ZIP takes any number of lists as inputs.  The lists should all be the same length.  ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc.&#xD;Viewing the inputs as the rows of a matrix, ZIP reports its transpose.</comment><header></header><code></code><translations>pl:$flash spakuj _&#xD;</translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportListAttribute"><l><option>columns</option></l><block var="lists"/></block></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="operators"><comment x="0" y="0" w="234.66666666666666" collapsed="false">The identity function: reports its input.&#xD;It&apos;s useful to get things like 3/4 or 5-2i into&#xD;numeric input slots.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="multimap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="267.3333333333333" collapsed="false">Takes as input a function of N inputs and N lists.&#xD;The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on.  (The lists should all be the same length.)</comment><header></header><code></code><translations>ca:multi-mapeja _ sobre _&#xD;pl:mapuj wielokrotnie _ na _&#xD;</translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><custom-block s="%s"><l></l></custom-block></block></autolambda><list></list></block><custom-block s="$flash zip %mult%l"><block var="lists"/></custom-block></block></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="196" collapsed="false">Takes a sentence in text string form and reports the sentence as a list of its words.</comment><header></header><code></code><translations>de:Satz $arrowRight Liste _&#xD;ca:frase $arrowRight llista _&#xD;es:frase $arrowRight lista _&#xD;fr:phrase $arrowRight liste _&#xD;pt:uma lista com as palavras da frase _&#xD;pl:zdanie $arrowRight lista _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><l></l></block><l>0</l></list></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>whitespace</option></l></block></block></block></script></block-definition><block-definition s="initialize: $nl datapoints - %&apos;100&apos; $nl groups (k) - %&apos;3&apos; $nl max iterations - %&apos;500&apos;" type="command" category="Blocks" space="true"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">100</input><input type="%n" initial="1">3</input><input type="%n" initial="1">500</input></inputs><script><block s="hide"></block><block s="clear"></block><block s="doResetTimer"></block><block s="clearEffects"></block><block s="doSetVar"><l>duration</l><l>...</l></block><block s="doSetVar"><l>dataset</l><custom-block s="%n random points"><block var="100"/></custom-block></block><block s="doSetVar"><l>k</l><block var="3"/></block><block s="doSetVar"><l>max iterations</l><block var="500"/></block><block s="doSetVar"><l>labels</l><block s="reportReshape"><l></l><list><block s="reportListAttribute"><l><option>length</option></l><block var="dataset"/></block></list></block></block><block s="doSetVar"><l>iterations</l><l>0</l></block><block s="doSetVar"><l>old centroids</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>colorshift</l><block s="reportRandom"><l>0</l><l>100</l></block><comment w="145" collapsed="false">used to make the colors of the groups different each time!</comment></block><block s="doSetVar"><l>colors</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportQuotient"><l>100</l><block var="k"/></block><l></l></list></block><block var="colorshift"/></list></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block var="k"/></block></block></block></script></block-definition><block-definition s="randomize centroids" type="command" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>centroids</l><custom-block s="%n random points"><block var="k"/></custom-block></block></script></block-definition><block-definition s="update duration" type="command" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>duration</l><block s="reportJoinWords"><list><block s="getTimer"></block><l> sec</l></list></block></block></script></block-definition><block-definition s="draw dataset" type="command" category="Blocks" space="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSwitchToCostume"><l>point</l></block><block s="setScale"><l>5</l></block><block s="doDeclareVariables"><list><l>#</l></list></block><block s="doSetVar"><l>#</l><l>1</l></block><block s="doForEach"><l>item</l><block var="dataset"/><script><block s="doGotoObject"><block s="reportVariadicProduct"><list><block var="item"/><l>10</l></list></block></block><block s="setEffect"><l><option>color</option></l><block s="reportListItem"><block s="reportListItem"><l>1</l><block s="reportListItem"><block var="#"/><block var="labels"/></block></block><block var="colors"/></block></block><block s="doStamp"></block><block s="doChangeVar"><l>#</l><l>1</l></block></script></block></script></block-definition><block-definition s="draw centroids" type="command" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSwitchToCostume"><l>centroid</l></block><block s="setScale"><l>100</l></block><block s="doForEach"><l>item</l><block var="centroids"/><script><block s="doGotoObject"><block s="reportVariadicProduct"><list><block var="item"/><l>10</l></list></block></block><block s="doStamp"></block></script></block></script></block-definition><block-definition s="draw border" type="command" category="Blocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="up"></block><block s="gotoXY"><l>-20</l><block s="reportAttributeOf"><l><option>top</option></l><l>Stage</l></block></block><block s="down"></block><block s="gotoXY"><l>-20</l><l>-20</l></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block><l>-20</l></block><block s="up"></block></script></block-definition><block-definition s="draw iteration" type="command" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="clear"></block><custom-block s="draw border"></custom-block><block s="doWarp"><script><custom-block s="draw dataset"></custom-block></script></block><custom-block s="draw centroids"></custom-block></script></block-definition><block-definition s="alert that k-means completed" type="command" category="Blocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="gotoXY"><l>-20</l><l>-40</l></block><block s="write"><l>k-means finished</l><l>12</l></block></script></block-definition><block-definition s="USE BIGNUMS %&apos;bool&apos;" type="command" category="operators"><comment x="0" y="0" w="303.3333333333333" collapsed="false">call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.</comment><header></header><code></code><translations>pt:altera utilização de aritmética do Scheme para _&#xD;ca:sistema numèric d&apos;Scheme _&#xD;pl:system liczbowy Scheme _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/biginteger.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/schemeNumber.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/bignums.js</l></list></block><block s="doApplyExtension"><l>big_switch(bool)</l><list><block var="bool"/></list></block></script></block-definition><block-definition s="%&apos;n&apos; !" type="reporter" category="operators"><comment x="0" y="0" w="190.66666666666666" collapsed="false">The factorial function, to make very large numbers, to demo bignums.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="n"/><l>0</l></list></block><l>1</l><block s="reportVariadicProduct"><list><block var="n"/><custom-block s="%n !"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block></list></block></block></block></script></block-definition><block-definition s="Scheme number %&apos;function&apos; of %&apos;number&apos;" type="reporter" category="operators"><comment x="0" y="0" w="300" collapsed="true">Provides Scheme arithmetic functions not in JavaScript</comment><header></header><code></code><translations>pt:_ de _&#xD;ca:Scheme _ de _&#xD;pl:liczba _ z _&#xD;</translations><inputs><input type="%s" readonly="true"><options>number?&#xD;complex?&#xD;real?&#xD;rational?&#xD;integer?&#xD;exact?&#xD;inexact?&#xD;exact&#xD;inexact&#xD;finite?&#xD;infinite?&#xD;nan?&#xD;numerator&#xD;denominator&#xD;real-part&#xD;imag-part&#xD;magnitude&#xD;angle</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>big_scheme(fn, num)</l><list><block var="function"/><block var="number"/></list></block></block></script></block-definition><block-definition s="// %&apos;comment&apos; $nl %&apos;code&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt" initial="1">comment</input><input type="%repRing" initial="1"></input></inputs><script><block s="doReport"><block var="code"/></block></script></block-definition><block-definition s="check if any centroid = infinity (too many points)" type="command" category="Blocks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><l></l><block s="reportQuotient"><l>1</l><l>0</l></block></list></block></autolambda><list></list></block><block s="reportListAttribute"><l><option>flatten</option></l><block var="centroids"/></block></block></block></block><script><block s="show"></block><block s="bubble"><l>too many points</l></block><block s="doSetVar"><l>done?</l><l>err</l></block><block s="doStopThis"><l><option>this script</option></l></block></script><list></list></block></script></block-definition><block-definition s="test %&apos;test name&apos; $nl results from %&apos;n&apos; trials $nl geomean %&apos;geomean&apos; $nl avg %&apos;avg&apos;" type="reporter" category="Blocks" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">test name</input><input type="%n" initial="1">10</input><input type="%b" initial="1">true</input><input type="%b" initial="1">true</input></inputs><script><custom-block s="init tests"></custom-block><block s="doDeclareVariables"><list><l>RESULTS</l><l>test</l></list></block><block s="doSetVar"><l>RESULTS</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block var="n"/><script><block s="doBroadcast"><l><option>__shout__go__</option></l><list></list></block><block s="doWaitUntil"><block s="reportVariadicOr"><list><block var="done?"/><block s="reportVariadicEquals"><list><block var="done?"/><l>err</l></list></block></list></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="done?"/><block s="reportVariadicNotEquals"><list><block var="done?"/><l>err</l></list></block></list></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="iterations"/><block var="duration"/><block s="reportQuotient"><block var="iterations"/><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="duration"/><l> sec</l></block></block></block></list></block><block var="RESULTS"/></block></script><list></list></block></script></block><block s="doSetVar"><l>test</l><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><block var="test name"/><block s="reportListAttribute"><l><option>length</option></l><block var="dataset"/></block></list></block><block s="reportNewList"><list><block s="reportNewList"><list><l>it</l><l>sec</l><l>it/sec</l></list></block></list></block><block var="RESULTS"/></list></block></block><block s="doIf"><block var="geomean"/><script><custom-block s="let %upvar be %s"><l>calculated geomean</l><custom-block s="geometric mean %mult%n"><block s="reportListItem"><l>3</l><block s="reportListAttribute"><l><option>columns</option></l><block var="RESULTS"/></block></block></custom-block></custom-block><block s="doAddToList"><block s="reportNewList"><list><l>geo it/sec</l><block var="calculated geomean"/></list></block><block var="test"/></block><block s="doAddToList"><block s="reportNewList"><list><l>it/sec/pt</l><block s="reportQuotient"><block var="calculated geomean"/><block s="reportListAttribute"><l><option>length</option></l><block var="dataset"/></block></block></list></block><block var="test"/></block></script><list></list></block><block s="doIf"><block var="avg"/><script><custom-block s="let %upvar be %s"><l>calculated average</l><custom-block s="mean %mult%n"><block s="reportListItem"><l>3</l><block s="reportListAttribute"><l><option>columns</option></l><block var="RESULTS"/></block></block></custom-block></custom-block><block s="doAddToList"><block s="reportNewList"><list><l>avg it/sec</l><block var="calculated average"/></list></block><block var="test"/></block><block s="doAddToList"><block s="reportNewList"><list><l>it/sec/pt</l><block s="reportQuotient"><block var="calculated average"/><block s="reportListAttribute"><l><option>length</option></l><block var="dataset"/></block></block></list></block><block var="test"/></block></script><list></list></block><block s="doAddToList"><block var="test"/><custom-block s="all tests"></custom-block></block><block s="doReport"><block var="test"/></block></script></block-definition><block-definition s="mean %&apos;n&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%mult%n" initial="1"></input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicSum"><block var="n"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="n"/></block></block></block></script></block-definition><block-definition s="all tests" type="reporter" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block var="ALL TESTS"/></block></script></block-definition><block-definition s="clear tests" type="command" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doSetVar"><l>ALL TESTS</l><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="let %&apos;x&apos; be %&apos;y&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doSetVar"><l>x</l><block var="y"/></block></script></block-definition><block-definition s="init tests" type="command" category="Blocks"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><custom-block s="all tests"></custom-block><l><option>list</option></l></block></block><script><custom-block s="clear tests"></custom-block></script><list></list></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="881"><pentrails>data:image/png;base64,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SqknAfiXM2fOXD8zM/N7yTDz+9KFV+ftk80PQc/NzT1bKXWD1lr28W5OVhHftLS0JHuYSz/jBCzReK/XO5ReLKugT2itTyil3t7v928okqXkP+m6SeWcJOAJzGTIWer+Oq31A0qpPwZwba/Xu2LSSvVSKExAAiMEKGB2CRIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIgAQqYfYAESIAESIAEIhCggCNAZ5YkQAIkQAIkQAGzD5AACZAACZBABAIUcATozJIESIAESIAEKGD2ARIgARIgARKIQIACjgCdWZIACZAACZAABcw+QAIkQAIkQAIRCFDAEaAzSxIgARIgARKggNkHSIAESIAESCACAQo4AnRmSQIkQAIkQAIUMPsACZAACZAACUQgQAFHgM4sSYAESIAESIACZh8gARIgARIggQgEKOAI0JklCZAACZAACVDA7AMkQAIkQAIkEIEABRwBOrMkARIgARIggf8PiNdYICH8lP0AAAAASUVORK5CYII=</pentrails><costumes><list struct="atomic" id="882"></list></costumes><sounds><list struct="atomic" id="883"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="k-means" idx="1" x="92" y="-40" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="false" hidden="true" costume="1" color="80,80,80,1" pen="tip" id="888"><costumes><list id="889"><item><ref mediaID="k-means_cst_centroid"></ref></item><item><ref mediaID="k-means_cst_point"></ref></item></list></costumes><sounds><list struct="atomic" id="890"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="10"><block s="receiveGo"></block><custom-block s="initialize: %br datapoints - %n %br groups (k) - %n %br max iterations - %n"><l>200</l><l>3</l><l>50</l></custom-block><custom-block s="randomize centroids"></custom-block><block s="doSetVar"><l>done?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doUntil"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="old centroids"/><block var="centroids"/></list></block><block s="reportVariadicGreaterThanOrEquals"><list><block var="iterations"/><block var="max iterations"/></list></block></list></block><script><block s="doSetVar"><l>old centroids</l><block var="centroids"/></block><block s="doChangeVar"><l>iterations</l><l>1</l></block><block s="doSetVar"><l>labels</l><custom-block s="label dataset %l"><block var="dataset"/></custom-block></block><block s="doSetVar"><l>centroids</l><block s="reportReshape"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportPipe"><custom-block s="// %mlt %br %repRing"><l>Find all the points that belong to a single group.</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><l/></block><block var="this centroid"/></list></block></autolambda><list></list></block><block var="labels"/></block></custom-block><list><custom-block s="// %mlt %br %repRing"><l>Isolate the indices that belong to that group.</l><block s="reifyReporter"><autolambda><block s="reportListItem"><l>2</l><block s="reportListAttribute"><l><option>columns</option></l><l/></block></block></autolambda><list></list></block></custom-block><custom-block s="// %mlt %br %repRing"><l>Get the coordinates of each point belonging to the group.</l><block s="reifyReporter"><autolambda><block s="reportListItem"><l></l><block var="dataset"/></block></autolambda><list></list></block></custom-block><custom-block s="// %mlt %br %repRing"><l>If the group is empty, then add 1 random point.</l><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="group"/><l></l></list></block><custom-block s="%n random points"><l>1</l></custom-block><block var="group"/></block></autolambda><list><l>group</l></list></block></custom-block><custom-block s="// %mlt %br %repRing"><l>Calculate the geometric mean of the x-coordinates and the y-coordinates.</l><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="geometric mean %mult%n"><block var="list"/></custom-block></autolambda><list><l>list</l></list></block><block s="reportListAttribute"><l><option>columns</option></l><l/></block></block></autolambda><list></list></block></custom-block></list></block></autolambda><list><l>this centroid</l></list></block><block s="reportNumbers"><l>1</l><block var="k"/></block></block><list><block var="k"/><l>2</l></list></block></block><custom-block s="check if any centroid = infinity (too many points)"></custom-block><block s="doIf"><block s="reportNot"><block s="reportGlobalFlag"><l><option>turbo mode</option></l></block></block><script><custom-block s="draw iteration"></custom-block></script><list></list></block></script></block><custom-block s="update duration"></custom-block><block s="doSetVar"><l>done?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><custom-block s="draw iteration"></custom-block><custom-block s="alert that k-means completed"></custom-block></script><script x="347" y="811"><custom-block s="test %s %br results from %n trials %br geomean %b %br avg %b"><l>simple test</l><l>10</l><l><bool>true</bool></l><l><bool>true</bool></l></custom-block></script></scripts></sprite><sprite name="interactive centroid!" idx="2" x="-200" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="1" color="186.15,0,55.84500000000013,1" pen="tip" id="1076"><costumes><list id="1077"><item><ref mediaID="interactive centroid!_cst_Untitled(2)"></ref></item></list></costumes><sounds><list struct="atomic" id="1078"></list></sounds><blocks></blocks><variables></variables><scripts><script x="20" y="20"><block s="gotoXY"><l>-200</l><l>0</l></block><block s="hide"></block><block s="doSwitchToCostume"><l>Untitled(2)</l></block><block s="doFor"><l>i</l><l>1</l><l>3</l><script><block s="doTellTo"><block s="newClone"><l><option>myself</option></l></block><block s="reifyScript"><script><block s="show"></block><block s="doSetVar"><l><option>my name</option></l><block var="i"/></block></script><list></list></block><list></list></block></script></block><custom-block s="initialize: %br datapoints - %n %br groups (k) - %n %br max iterations - %n"><l>375</l><l>3</l><l>50</l></custom-block><block s="doSetVar"><l>labels</l><custom-block s="label dataset %l"><block var="dataset"/></custom-block></block><block s="doTellTo"><l>k-means</l><block s="reifyScript"><script><custom-block s="draw iteration"></custom-block></script><list></list></block><list></list></block></script><script x="20" y="302.99999999999983"><block s="doForever"><script><block s="doSetVar"><l>labels</l><custom-block s="label dataset %l"><block var="dataset"/></custom-block></block><block s="doTellTo"><l>k-means</l><block s="reifyScript"><script><custom-block s="draw iteration"></custom-block></script><list></list></block><list></list></block></script></block></script><script x="20" y="404.49999999999955"><block s="receiveInteraction"><l><option>dropped</option></l></block><block s="doReplaceInList"><block s="reportGet"><l><option>name</option></l></block><block var="centroids"/><block s="reportQuotient"><block s="getPosition"></block><l>10</l></block></block></script><comment x="296" y="11" w="90" collapsed="false">run these first two scripts to play around w/ voronoi cells!</comment></scripts></sprite><watcher var="x" style="normal" x="20" y="20" color="243,118,29" hidden="true"/><watcher var="y" style="normal" x="20" y="62.00000399999999" color="243,118,29" hidden="true"/><watcher var="z" style="normal" x="20" y="104.00000799999998" color="243,118,29" hidden="true"/><watcher var="k" style="normal" x="20" y="317.999996" color="243,118,29" hidden="true"/><watcher var="old centroids" style="normal" x="20" y="317.999996" color="243,118,29" hidden="true"/><watcher var="max iterations" style="normal" x="20" y="317.999996" color="243,118,29" hidden="true"/><watcher var="centroids" style="normal" x="23.999999999999773" y="29.99999599999999" color="243,118,29" extX="128.9999999999999" extY="69" hidden="true"/><watcher var="fullscreen?" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="done?" style="normal" x="10" y="31.000001999999995" color="243,118,29" hidden="true"/><watcher scope="Stage" s="getTimer" style="normal" x="10" y="55.00000399999999" color="4,148,220" hidden="true"/><watcher var="iterations" style="normal" x="9" y="306.999996" color="243,118,29"/><watcher var="duration" style="normal" x="9" y="330.000006" color="243,118,29"/><watcher var="closeness" style="normal" x="10" y="76.00000599999998" color="243,118,29" hidden="true"/><watcher var="colorshift" style="normal" x="10" y="97.00000799999998" color="243,118,29" hidden="true"/><watcher var="labels" style="normal" x="9" y="13.999998000000005" color="243,118,29" hidden="true"/><watcher var="dataset" style="normal" x="180" y="12.999996000000024" color="243,118,29" hidden="true"/><watcher var="colors" style="normal" x="10" y="118.00000999999997" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="k"><l>3</l></variable><variable name="centroids" transient="true"/><variable name="iterations" transient="true"/><variable name="old centroids" transient="true"/><variable name="max iterations" transient="true"/><variable name="labels" transient="true"/><variable name="dataset" transient="true"/><variable name="done?"><bool>true</bool></variable><variable name="duration" transient="true"/><variable name="colorshift" transient="true"/><variable name="colors" transient="true"/><variable name="ALL TESTS" transient="true" hidden="true"/></variables></scene></scenes></project><media name="kmeans" app="Snap! 10.4.6, https://snap.berkeley.edu" version="2"><costume name="centroid" center-x="9.5" center-y="10" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAUCAYAAABvVQZ0AAAAAXNSR0IArs4c6QAAAbpJREFUOE+V1M2LiFEUx/HPKLGwIAspCzsWIzRIkZexGCI7f8AsLFgoxUQpZiGJ7EyjZqOUwhJRQlnIxELZmOWkvJadWPEc3avrdh9mzup5znOe7z0vv3MHtG0x9uMQDqSQu7iNe/je+m2g4VzdAV5iec9BH3AYAf/Latha3MK6HlDpvoFj+JqdJSxAT7FiDqAc8h5bMRuODFuVSitBY7iMNdUhH6sDI4HdJewULhQZPcFweo+Mb2JDMYhrybck+Y5gMmd2DmcL2C5EBlPY1ih7E7ZgIn37FhW0YJ+68W/G9D/6FxPdmLKLg8PGMuw+9iXnVbyryo5Pr7G+yPJk19MoM1c0HrCcRY4bTw9l2eH60R2wqIDtwY4adgKXiqCAhcLLgbTUcgYL/5fZZBd0viGVGlhX8LvMsAcYSc+fsR0LujIeY2WPiHthg3iGpfNQ/3XsLSZ+ulynmOLRecB+FhsUUhkqYSHCFxXsFS7iDWIrWnsboJ2YqW+NsncRFLIJLfVdALElIY+ZcjdzQtG7R3O8Od7iYAa1YOE7jiuN3n3BsvRzCPpOp7Ho2x9r3bRxMT6sJPEco4hseu0XpkdVuEatn8sAAAAASUVORK5CYII=" mediaID="k-means_cst_centroid"/><costume name="point" center-x="71" center-y="63" image="data:image/png;base64,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" mediaID="k-means_cst_point"/><costume name="Untitled(2)" center-x="7" center-y="7.5" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAYAAADUFP50AAAAAXNSR0IArs4c6QAAAMhJREFUOE+l0zFKQ0EQxvHfsxJiY2kvgVS5gFjqFcwJbIQEUniEmMIinZVtajttldRWISAkp4ithJG3EhZf3otOszDz/ZnZnW8Lv8cB2mXpA1+5rMgSHdzjHK2y9olX3GCV9AmMs48RDiumWJeax6gn8AIvFUCePsMswGPMcdIQXKIb4BWmDaEk6wV4h9s9wXGAz7jcE3z6V8c/3/EI7zhtOO7Pq4Y+dvPWAAzrhau+95jiAdc18ASDbeck/S6vDrHIvZo3qv0dG9EoIZaDSLZ4AAAAAElFTkSuQmCC" mediaID="interactive centroid!_cst_Untitled(2)"/></media></snapdata>