<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 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 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 href="mailto:p.vanbreugel@gmail.com" target="_blank"></a><a 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 href="mailto:peter.zamb@gmail.com" target="_blank"></a><a href="mailto:peter.zamb@gmail.com" target="_blank">peter.zamb@gmail.com</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 href="mailto:p.vanbreugel@gmail.com" target="_blank">p.vanbreugel@gmail.com</a>>
                          wrote:<br>
                          ><br>
                          ><br>
                          > On Wed, Sep 30, 2015 at 2:02 AM, Anna
                          Petrášová <<a href="mailto:kratochanna@gmail.com" target="_blank">kratochanna@gmail.com</a>><br>
                          > wrote:<br>
                          >><br>
                          >><br>
                          >><br>
                          >> On Tue, Sep 29, 2015 at 6:09 PM,
                          Paulo van Breugel<br>
                          >> <<a href="mailto:p.vanbreugel@gmail.com" target="_blank">p.vanbreugel@gmail.com</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><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 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 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><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>