User Tools

Site Tools


other:python:jyp_steps

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
other:python:jyp_steps [2016/01/29 15:41]
jypeter Added the numpy for matlab users references
other:python:jyp_steps [2016/02/09 15:32]
jypeter Added the views side effect section
Line 49: Line 49:
 Where: [[http://​docs.scipy.org/​doc/​|html and pdf documentation]] Where: [[http://​docs.scipy.org/​doc/​|html and pdf documentation]]
  
-How to get started?+==== Getting ​started ​==== 
   - always remember that indices start at ''​0''​ and that the last element of an array is at index ''​-1''​!\\ First learn about //​indexing//​ and //slicing// by manipulating strings, as shown in [[#​part1|Part 1]] above (try '''​This document by JY is awesome!'​[::​-1]''​ and '''​This document by JY is awesome!'​[slice(None,​ None, -1)]''​) 8-)   - always remember that indices start at ''​0''​ and that the last element of an array is at index ''​-1''​!\\ First learn about //​indexing//​ and //slicing// by manipulating strings, as shown in [[#​part1|Part 1]] above (try '''​This document by JY is awesome!'​[::​-1]''​ and '''​This document by JY is awesome!'​[slice(None,​ None, -1)]''​) 8-)
   - if you are a Matlab user (but the references are interesting for others as well), you can read the following:   - if you are a Matlab user (but the references are interesting for others as well), you can read the following:
Line 59: Line 60:
     - Numpy Reference Guide     - Numpy Reference Guide
     - Scipy Reference Guide     - Scipy Reference Guide
 +
 +==== Beware of the array view side effects ====
 +
 +<note warning>​When you take a slice of an array, you get a **//​View//​** : an array that has a new shape but that still shares its data with the first array.
 +
 +That is not a problem when you only read the values, but **if you change the values of the //View//, you change the values of the first array** (and vice-versa)! If that is not what want, do not forget to **make a copy** of the data before working on it!
 +
 +//Views// are a good thing most of the time, so only make a copy of your data when needed, because otherwise copying a big array will just be a waste of CPU and computer memory. Anyway, it is always better to understand what you are doing... :-P
 +
 +Check the example below and the [[https://​docs.scipy.org/​doc/​numpy-dev/​user/​quickstart.html#​copies-and-views|copies and views]] part of the quickstart tutorial.
 +
 +<code python>
 +>>>​ import numpy as np
 +>>>​ a = np.arange(30).reshape((3,​10))
 +>>>​ a
 +array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
 +       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 +       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])
 +
 +>>>​ b = a[1, :]
 +>>>​ b
 +array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
 +
 +>>>​ b[3:7] = 0
 +>>>​ b
 +array([10, 11, 12,  0,  0,  0,  0, 17, 18, 19])
 +
 +>>>​ a
 +array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
 +       [10, 11, 12,  0,  0,  0,  0, 17, 18, 19],
 +       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]])
 +       
 +>>>​ a[:, 2:4] = -1
 +>>>​ a
 +array([[ 0,  1, -1, -1,  4,  5,  6,  7,  8,  9],
 +       [10, 11, -1, -1,  0,  0,  0, 17, 18, 19],
 +       [20, 21, -1, -1, 24, 25, 26, 27, 28, 29]])
 +       
 +>>>​ b
 +array([10, 11, -1, -1,  0,  0,  0, 17, 18, 19])
 +
 +>>>​ c = a[1, :].copy()
 +>>>​ c
 +array([10, 11, -1, -1,  0,  0,  0, 17, 18, 19])
 +
 +>>>​ c[:] = 9
 +>>>​ c
 +array([9, 9, 9, 9, 9, 9, 9, 9, 9, 9])
 +
 +>>>​ b
 +array([10, 11, -1, -1,  0,  0,  0, 17, 18, 19])
 +
 +>>>​ a
 +array([[ 0,  1, -1, -1,  4,  5,  6,  7,  8,  9],
 +       [10, 11, -1, -1,  0,  0,  0, 17, 18, 19],
 +       [20, 21, -1, -1, 24, 25, 26, 27, 28, 29]])
 +</​code></​note>​
  
 ===== cdms2 and netCDF4 ===== ===== cdms2 and netCDF4 =====
other/python/jyp_steps.txt · Last modified: 2024/03/07 10:15 by jypeter