<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    <br>
    <div class="moz-cite-prefix">On 30-09-15 17:52, Paulo van Breugel
      wrote:<br>
    </div>
    <blockquote cite="mid:560C0520.9030509@gmail.com" type="cite">
      <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
      <br>
      <br>
      <div class="moz-cite-prefix">On 30-09-15 17:47, Anna Petrášová
        wrote:<br>
      </div>
      <blockquote
cite="mid:CAE0EDEoSucig6AYsdar7O1MSpfFwUiJhttSia7aKPXmZf+qpWA@mail.gmail.com"
        type="cite">
        <div dir="ltr"><br>
          <div class="gmail_extra"><br>
            <div class="gmail_quote">On Wed, Sep 30, 2015 at 11:20 AM,
              Paulo van Breugel <span dir="ltr"><<a
                  moz-do-not-send="true"
                  class="moz-txt-link-abbreviated"
                  href="mailto:p.vanbreugel@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:p.vanbreugel@gmail.com">p.vanbreugel@gmail.com</a></a>></span>
              wrote:<br>
              <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                <div text="#000000" bgcolor="#FFFFFF">
                  <div>
                    <div class="h5"> <br>
                      <br>
                      <div>On 30-09-15 16:18, Anna Petrášová wrote:<br>
                      </div>
                      <blockquote type="cite">
                        <div dir="ltr"><br>
                          <div class="gmail_extra"><br>
                            <div class="gmail_quote">On Wed, Sep 30,
                              2015 at 9:27 AM, Paulo van Breugel <span
                                dir="ltr"><<a moz-do-not-send="true"
                                  href="mailto:p.vanbreugel@gmail.com"
                                  target="_blank">p.vanbreugel@gmail.com</a>></span>
                              wrote:<br>
                              <blockquote class="gmail_quote"
                                style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                                <div dir="ltr"><br>
                                  <div class="gmail_extra"><br>
                                    <div class="gmail_quote"><span>On
                                        Wed, Sep 30, 2015 at 11:53 AM,
                                        Pietro <span dir="ltr"><<a
                                            moz-do-not-send="true"
                                            class="moz-txt-link-abbreviated"
href="mailto:peter.zamb@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:peter.zamb@gmail.com">peter.zamb@gmail.com</a></a>></span>
                                        wrote:<br>
                                        <blockquote class="gmail_quote"
                                          style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">On


                                          Wed, Sep 30, 2015 at 9:51 AM,
                                          Paulo van Breugel<br>
                                          <span><<a
                                              moz-do-not-send="true"
                                              class="moz-txt-link-abbreviated"
href="mailto:p.vanbreugel@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:p.vanbreugel@gmail.com">p.vanbreugel@gmail.com</a></a>>
                                            wrote:<br>
                                            ><br>
                                            ><br>
                                            > On Wed, Sep 30, 2015 at
                                            2:02 AM, Anna Petrášová <<a
                                              moz-do-not-send="true"
                                              class="moz-txt-link-abbreviated"
href="mailto:kratochanna@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:kratochanna@gmail.com">kratochanna@gmail.com</a></a>><br>
                                            > wrote:<br>
                                            >><br>
                                            >><br>
                                            >><br>
                                            >> On Tue, Sep 29,
                                            2015 at 6:09 PM, Paulo van
                                            Breugel<br>
                                            >> <<a
                                              moz-do-not-send="true"
                                              class="moz-txt-link-abbreviated"
href="mailto:p.vanbreugel@gmail.com"><a class="moz-txt-link-abbreviated" href="mailto:p.vanbreugel@gmail.com">p.vanbreugel@gmail.com</a></a>>
                                            wrote:<br>
                                            >>><br>
                                            >>> This must be a
                                            very basic question, but I
                                            can't find an easy/direct
                                            way<br>
                                            >>> to do this. In
                                            python, if I have an array
                                            with values with a length
                                            equal to<br>
                                            >>> the number of
                                            rows in an attribute table
                                            of a (point) vector layer,
                                            how can<br>
                                            >>> I write those
                                            values to a new column in
                                            that attribute table. I can
                                            of<br>
                                            >>> course first
                                            create the column, but than
                                            how to update that column
                                            with the<br>
                                            >>> values in the
                                            array?<br>
                                            >><br>
                                            >><br>
                                            >> it should be pretty
                                            easy to do with pygrass,
                                            unfortunately there is no<br>
                                            >> example on
                                            assigning attributes in the
                                            official documentation [1], 
                                            but it<br>
                                            >> should be pretty
                                            easy, something like that
                                            (not tested):<br>
                                            >><br>
                                            >> with
                                            VectorTopo('myvector',
                                            mode='w') as vectormap:<br>
                                            >>     for feature in
                                            vectormap:<br>
                                            >>       
                                             feature.attrs['mycolumn'] =
                                            value<br>
                                            >><br>
                                            >><br>
                                            > Thanks, but that seems
                                            to write the vector back
                                            without attribute table<br>
                                            <br>
                                          </span>You have to save the
                                          changes in the database out
                                          from your cycle, with:<br>
                                          <br>
                                          vectormap.table.conn.commit()<br>
                                        </blockquote>
                                        <div><br>
                                        </div>
                                      </span>
                                      <div>Thanks Pietro. I am, however,
                                        not sure I understand (I tried
                                        to use it, but thanks to my
                                        limited experience in Python /
                                        pygrass not much luck). Just to
                                        be more specific, I am trying to
                                        create a script that divides
                                        points in training and test
                                        groups, similar to v.kcv, but
                                        with points clustered in space.
                                        E.g.,<br>
                                        <br>
                                        <span
                                          style="font-family:monospace,monospace">#
                                          Create vector<br>
                                          grass.run_command("v.random",
                                          output="testB", npoints=10,
                                          overwrite=True)<br>
                                          grass.run_command("v.db.addtable",

                                          map="testB", columns="X DOUBLE
                                          PRECISION,Y DOUBLE
                                          PRECISION,GR INTEGER")<br>
                                          grass.run_command("v.to.db",
                                          map="test", option="coor",
                                          columns="X,Y")<br>
                                          <br>
                                          # Create groups<br>
                                          vectmap = 'test'<br>
                                          cvals =
                                          array(grass.vector_db_select(vectmap,
                                          layer = int(1), columns =
                                          'X,Y')['values'].values()).astype(np.float)<br>
                                          centroids,_ = kmeans(cvals,2)<br>
                                          idx,_ = vq(cvals,centroids)<br>
                                          <br>
                                        </span></div>
                                      <div><span
                                          style="font-family:monospace,monospace">#
                                          write results to tabel<br>
                                        </span></div>
                                      <div><span
                                          style="font-family:monospace,monospace">Now


                                          I would like to write idx to
                                          the column 'GR' in the
                                          attribute table of 'test'.<br>
                                        </span><br>
                                      </div>
                                      <div>p.s. I am first creating the
                                        XY columns now, but is there a
                                        function to get the coordinates
                                        (cvals) in pygrass directly?<br>
                                      </div>
                                      <div><br>
                                        <br>
                                      </div>
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                              <div>I don't fully understand the example,
                              </div>
                            </div>
                          </div>
                        </div>
                      </blockquote>
                      <br>
                    </div>
                  </div>
                  Thanks for the quick response. I basically have a list
                  with values (idx in the example above) which I like to
                  add as a column to the attribute table of an existing
                  vector (point layer). The length of idx is equal to
                  the number of rows in the attribute table. The
                  solution of Anna seems like an elegant solution (and
                  easier and more flexible than other solutions I tried
                  using e.g., sqlite3). However, as I wrote, I end up
                  with a vector without attribute table. You wrote that
                  I "have to save the changes in the database out from
                  your cycle, with: vectormap.table.conn.commit()". I
                  am, however, not sure what you mean with 'out from
                  your cycle' or how to implement that. <br>
                </div>
              </blockquote>
              <div><br>
              </div>
              <div>probably after the for cycle ends you would call this
                'vectormap.table.conn.commit()', if it doesn't works,
                try to put it in the cycle (I am not sure what is
                supposed to work).</div>
            </div>
          </div>
        </div>
      </blockquote>
      <br>
      I did try both, with no luck so-far. I'll give it another try
      though, perhaps I did something else wrong.<br>
    </blockquote>
    <br>
    Tried out again, but after running the code below, I end up with an
    empty vector layer (no points and no attribute table). Same if I put
    the vectormap.table.conn.commit() in the for cycle.<br>
    <br>
    <pre>import grass.script as grass</pre>
    <pre>from grass.pygrass.vector import VectorTopo</pre>
    <pre>grass.run_command("v.random", output="testB", npoints=10, overwrite=True)</pre>
    <pre>grass.run_command("v.db.addtable", map="testB", columns="GR INTEGER")</pre>
    <pre>with VectorTopo('testB', mode='w') as vectormap:</pre>
    <pre>    for feature in vectormap:</pre>
    <pre>        feature.attrs['GR'] = 9</pre>
    <pre>        vectormap.table.conn.commit()</pre>
    <pre>
</pre>
    <br>
    <blockquote cite="mid:560C0520.9030509@gmail.com" type="cite">
      <blockquote
cite="mid:CAE0EDEoSucig6AYsdar7O1MSpfFwUiJhttSia7aKPXmZf+qpWA@mail.gmail.com"
        type="cite">
        <div dir="ltr">
          <div class="gmail_extra">
            <div class="gmail_quote">
              <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                <div text="#000000" bgcolor="#FFFFFF"><span class=""> <br>
                    <blockquote type="cite">
                      <div dir="ltr">
                        <div class="gmail_extra">
                          <div class="gmail_quote">
                            <div>but yes, you can get coordinates:</div>
                            <div><br>
                            </div>
                            <div><font face="monospace, monospace"><span
                                  style="font-size:12.8px">with
                                  VectorTopo('myvector', mode='w') as
                                  vectormap:</span><br
                                  style="font-size:12.8px">
                                <span style="font-size:12.8px">    for
                                  feature in vectormap:</span><br
                                  style="font-size:12.8px">
                                <span style="font-size:12.8px">       
                                  print feature.x</span></font><br>
                            </div>
                            <div><span
                                style="font-family:monospace,monospace;font-size:12.8px"> 
                                      print feature.y</span><font
                                face="monospace, monospace"><span
                                  style="font-size:12.8px"><br>
                                </span></font></div>
                          </div>
                        </div>
                      </div>
                    </blockquote>
                    <br>
                  </span> Great, thanks. I did not find this in the
                  manual. If it is not there, perhaps it would be
                  something worth including? I would not mind providing
                  a text, but I am not sure what would be the best way
                  to do that.<br>
                </div>
              </blockquote>
              <div><br>
              </div>
              <div>Technically, it's in the manual:</div>
              <div><a moz-do-not-send="true"
href="https://grass.osgeo.org/grass70/manuals/libpython/pygrass_vector.html#geometry-classes">https://grass.osgeo.org/grass70/manuals/libpython/pygrass_vector.html#geometry-classes</a></div>
              <div><br>
              </div>
              <div>but we are lacking more examples of often used
                constructions. Some other examples are available in the
                recent workshop we did:</div>
              <div><br>
              </div>
              <div><a moz-do-not-send="true"
href="https://github.com/wenzeslaus/python-grass-addon/blob/master/02_pygrass_library.ipynb">https://github.com/wenzeslaus/python-grass-addon/blob/master/02_pygrass_library.ipynb</a><br>
              </div>
            </div>
          </div>
        </div>
      </blockquote>
      <br>
      Thanks, I will have a look at it.<br>
      <blockquote
cite="mid:CAE0EDEoSucig6AYsdar7O1MSpfFwUiJhttSia7aKPXmZf+qpWA@mail.gmail.com"
        type="cite">
        <div dir="ltr">
          <div class="gmail_extra">
            <div class="gmail_quote">
              <div><br>
              </div>
              <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                <div text="#000000" bgcolor="#FFFFFF"> <br>
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div class="gmail_extra">
                        <div class="gmail_quote">
                          <div> </div>
                          <blockquote class="gmail_quote"
                            style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
                            <div dir="ltr">
                              <div class="gmail_extra">
                                <div class="gmail_quote">
                                  <div> <br>
                                  </div>
                                  <blockquote class="gmail_quote"
                                    style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span><font
                                        color="#888888"><br>
                                        Pietro<br>
                                      </font></span></blockquote>
                                </div>
                                <br>
                              </div>
                            </div>
                          </blockquote>
                        </div>
                        <br>
                      </div>
                    </div>
                  </blockquote>
                  <br>
                </div>
              </blockquote>
            </div>
            <br>
          </div>
        </div>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>