Skip to content

Instantly share code, notes, and snippets.

@perrette
Last active January 1, 2016 15:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save perrette/8166666 to your computer and use it in GitHub Desktop.
Save perrette/8166666 to your computer and use it in GitHub Desktop.
Dimarray notebooks
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Introduction to dimarray"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Download dimarray at:\n",
"https://github.com/perrette/dimarray/\n",
"\n",
"Including the latest version of this notebook:\n",
"https://github.com/perrette/dimarray/blob/master/Tutorial.ipynb"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab\n",
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Using matplotlib backend: GTKAgg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import dimarray as da\n",
"from dimarray import DimArray"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Definition and attributes of a DimArray"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A __`DimArray`__ can be defined just like a numpy array, with additional information about axis values (`axes=`) and axis names (`dims=`)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = DimArray(values=[[1,2,3],[4,5,6]], axes=[[\"a\",\"b\"], [0,1,2]], dims=['x0','x1']) \n",
"a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): a to b\n",
"1 / x1 (3): 0 to 2\n",
"array([[1, 2, 3],\n",
" [4, 5, 6]])"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Array data are stored in a `values` attribute:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a.values"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"array([[1, 2, 3],\n",
" [4, 5, 6]])"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While dimensions are stored in an `axes` attribute, which is equivalent to a list of __`Axis`__ objects:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a.axes"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): a to b\n",
"1 / x1 (3): 0 to 2"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ax = a.axes[0] # by integer position\n",
"ax = a.axes['x0'] # by axis name\n",
"ax"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"x0 (2): a to b"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An __`Axis`__ object itself has `name` and `values` attributes:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ax.name"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 7,
"text": [
"'x0'"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ax.values"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"array(['a', 'b'], dtype=object)"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For convenience, axis names and values can be accessed directly via `dims` and `<axis name>`. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a.x0, a.x1 # alias for a.axes['x0'].values, a.axes['x1'].values"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"(array(['a', 'b'], dtype=object), array([0, 1, 2]))"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a.dims # `dims` is just an alias for axis names"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 10,
"text": [
"('x0', 'x1')"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that numpy-like attribute `shape` and `ndim`, among others, are also defined:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a.shape"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"(2, 3)"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a.ndim"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"2"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Alternative definitions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For convenience, two other possibilities exist to define a DimArray, either with a list of tuples or with a dictionary of axes"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"b = DimArray([[1,2,3],[4,5,6]], axes = {'x0':[\"a\",\"b\"], 'x1':[0,1,2]}, dims=['x0','x1']) # dims could be omitted here\n",
"c = DimArray([[1,2,3],[4,5,6]], axes=[(\"x0\",[\"a\",\"b\"]), (\"x1\", [0,1,2])]) \n",
"np.all(a == b == c)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"True"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note the keyword argument form above is only valid for non-square arrays, and requires the additional parameter `dims=` if any two axes have the same size. \n",
"\n",
"The `array` function is also provided as a convenience, to define a DimArray from keyword arguments (this is an alias for DimArray.from_kw). In this form, no keyword argument is allowed (no metadata) except for axis names."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"d = DimArray.from_kw([[1,2,3],[4,5,6]], ['x0','x1'], x0=[\"a\",\"b\"], x1=[0,1,2]) \n",
"e = da.array([[1,2,3],[4,5,6]], ['x0','x1'], x0=[\"a\",\"b\"], x1=[0,1,2]) # ['x0','x1'] is guessed from array shape\n",
"f = da.array([[1,2,3],[4,5,6]], x0=[\"a\",\"b\"], x1=[0,1,2]) # ['x0','x1'] is guessed from array shape\n",
"np.all(a == b == c == d == e == f)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
"True"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is also possible to omit any of the first three arguments, and they will be automatically named following a default pattern of \"x0\", \"x1\" ... for axis names and [0, 1, ...] for axis values."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"DimArray([[1,2,3],[4,5,6]]) # automatic labelling"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 15,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): 0 to 1\n",
"1 / x1 (3): 0 to 2\n",
"array([[1, 2, 3],\n",
" [4, 5, 6]])"
]
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"DimArray([[1,2,3],[4,5,6]], dims=['items','time']) # automatic axis labelling"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 16,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'items', 'time'\n",
"0 / items (2): 0 to 1\n",
"1 / time (3): 0 to 2\n",
"array([[1, 2, 3],\n",
" [4, 5, 6]])"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"DimArray([[1,2,3],[4,5,6]], axes=[list(\"ab\"), np.arange(1950,1953)]) # automatic dimension labelling"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): a to b\n",
"1 / x1 (3): 1950 to 1952\n",
"array([[1, 2, 3],\n",
" [4, 5, 6]])"
]
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As for `values`, an array of NaNs will be generated if this parameter (first argument) is left empty:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"DimArray(axes=[[\"a\",\"b\"], [0,1,2]], dims=['x0','x1']) # empty data, fill with NaNs (float only)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
"dimarray: 0 non-null elements (6 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): a to b\n",
"1 / x1 (3): 0 to 2\n",
"array([[ nan, nan, nan],\n",
" [ nan, nan, nan]])"
]
}
],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Support for metadata"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`DimArray` and `Axis` objects, support metadata. They can be passed by keyword arguments to DimArray (not via da.array or DimArray.from_kw !)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = DimArray([[1,2,3],[4,5,6]], name='myname', units='myunits') \n",
"a.name, a.units"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
"('myname', 'myunits')"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ax = a.axes[0]\n",
"ax.units = \"meters\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"metadata are conserved by slicing and along-axis transformation, but are lost with any other transformation"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a[:].units"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 21,
"text": [
"'myunits'"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ax[:].units"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"'meters'"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Indexing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### by axis values"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from dimarray import DimArray\n",
"v = DimArray([[1,2,3],[4,5,6]], axes=[[\"aa\",\"bb\"], [10.,20.,30.]], dims=['x0','x1'], dtype=float) \n",
"v"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 23,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): aa to bb\n",
"1 / x1 (3): 10.0 to 30.0\n",
"array([[ 1., 2., 3.],\n",
" [ 4., 5., 6.]])"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### Single value\n",
"a = v[:,10]\n",
"b = v.take(10, axis=1)\n",
"c = v.take(10, axis='x1')\n",
"d = v.take({'x1':10}) # dict\n",
"assert a is not None\n",
"assert(a==b==c==d)\n",
"a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
"dimarray: 2 non-null elements (0 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (2): aa to bb\n",
"array([ 1., 4.])"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#string\n",
"v[\"aa\"]\n",
"v.take(\"aa\", axis=0)\n",
"v.take(\"aa\", axis=0, keepdims=1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": [
"dimarray: 3 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (1): aa to aa\n",
"1 / x1 (3): 10.0 to 30.0\n",
"array([[ 1., 2., 3.]])"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"v['aa',10]\n",
"v[[\"aa\"]]\n",
"d = v.take({'x1':10}) # dict\n",
"v.take((\"aa\", 10), axis=0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 26,
"text": [
"1.0"
]
}
],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### List\n",
"a = v[:,[10,20]]\n",
"b = v.take([10,20], axis='x1')\n",
"assert np.all(a==b)\n",
"a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": [
"dimarray: 4 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): aa to bb\n",
"1 / x1 (2): 10.0 to 20.0\n",
"array([[ 1., 2.],\n",
" [ 4., 5.]])"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### Slice\n",
"c = v[:,10:20] # slice include last element\n",
"d = v.take(slice(10,20), axis='x1') # slice via tuple"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 28
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### by integer position"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### Single values\n",
"v.ix[:,0] # WARNING: 'ix' stands for integer index, in contrast to pandas\n",
"v.take(0, axis=1, indexing='position')\n",
"v.take(0, axis='x1', indexing='position')\n",
"v.take({\"x1\":0},indexing='position') # keyword arguments: EXPERIMENTAL"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"dimarray: 2 non-null elements (0 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (2): aa to bb\n",
"array([ 1., 4.])"
]
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### list\n",
"a = v.ix[:,[0,1]]\n",
"b = v.take([0,1], axis='x1', indexing='position')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = v.ix[:,0:1] # does NOT include last element\n",
"b = v.take(slice(0,1), axis='x1', indexing='position') # slice via tuple"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 31
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reindex Axis"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#import dim\n",
"import dimarray.core._indexing as re; reload(re)\n",
"import dimarray as da\n",
"a = da.DimArray([1,2,3],[('x0', [1,2,3])])\n",
"b = da.DimArray([3,4],[('x0',[1,3])])\n",
"b.reindex_axis([1,2,3])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 32,
"text": [
"dimarray: 2 non-null elements (1 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (3): 1 to 3\n",
"array([ 3., nan, 4.])"
]
}
],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Can also reindex in \"interp\" mode\n",
"b.reindex_axis([0,1,2,3], method='interp')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 33,
"text": [
"dimarray: 3 non-null elements (1 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (4): 0 to 3\n",
"array([ nan, 3. , 3.5, 4. ])"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Or like another array\n",
"c = da.DimArray([[1,2,3], [1,2,3]],[('x1',[\"a\",\"b\"]),('x0',[1, 2, 3])])\n",
"b.reindex_like(c, method='interp')\n",
"#b.reindex_axis([1,2,3], method='interp')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": [
"dimarray: 3 non-null elements (0 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (3): 1 to 3\n",
"array([ 3. , 3.5, 4. ])"
]
}
],
"prompt_number": 34
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Modify dimensions: basic functionality"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Basic numpy methods to modify array dimensions are implemented in dimarray, with some additional functionality allowed by named dimensions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Transpose"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Transpose, just like its numpy equivalent, permutes dimensions, but in dimarray it can be provided with axis names instead of just axis position."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = DimArray([[1,2,3],[3,4,5]],dims=('x0','x1'))\n",
"a.transpose()\n",
"a.T"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 35,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x1', 'x0'\n",
"0 / x1 (3): 0 to 2\n",
"1 / x0 (2): 0 to 1\n",
"array([[1, 3],\n",
" [2, 4],\n",
" [3, 5]])"
]
}
],
"prompt_number": 35
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = DimArray([[[1,2,3],[3,4,5]]],dims=('x2','x0','x1'))\n",
"a.transpose(('x1','x2','x0'))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 36,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x1', 'x2', 'x0'\n",
"0 / x1 (3): 0 to 2\n",
"1 / x2 (1): 0 to 0\n",
"2 / x0 (2): 0 to 1\n",
"array([[[1, 3]],\n",
"\n",
" [[2, 4]],\n",
"\n",
" [[3, 5]]])"
]
}
],
"prompt_number": 36
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Insert new axis"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Numpy provides a np.newaxis constant (equal to None), to augment the array dimensions with new singleton axes. In dimarray, newaxis has been implemented as an array method, which requires to indicate axis name and optionally axis position (`pos=`). Under the `repeat` section, you'll see it is also possible to input the values of the new axis in order to repeast the array along it."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = DimArray([1,2])\n",
"a.newaxis('new', pos=1) # singleton"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 37,
"text": [
"dimarray: 2 non-null elements (0 null)\n",
"dimensions: 'x0', 'new'\n",
"0 / x0 (2): 0 to 1\n",
"1 / new (1): None to None\n",
"array([[1],\n",
" [2]])"
]
}
],
"prompt_number": 37
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Reshape"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = da.DimArray.from_kw(arange(2), lon=[30., 40.])\n",
"b = a.reshape(('time','lon'))\n",
"b"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 38,
"text": [
"dimarray: 2 non-null elements (0 null)\n",
"dimensions: 'time', 'lon'\n",
"0 / time (1): None to None\n",
"1 / lon (2): 30.0 to 40.0\n",
"array([[0, 1]])"
]
}
],
"prompt_number": 38
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Repeat"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### Single axis:\n",
">>> b.repeat(np.arange(1950,1955), axis=\"time\") # doctest: +ELLIPSIS"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 39,
"text": [
"dimarray: 10 non-null elements (0 null)\n",
"dimensions: 'time', 'lon'\n",
"0 / time (5): 1950 to 1954\n",
"1 / lon (2): 30.0 to 40.0\n",
"array([[0, 1],\n",
" [0, 1],\n",
" [0, 1],\n",
" [0, 1],\n",
" [0, 1]])"
]
}
],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### Multi-axis\n",
"# ...create some dummy data:\n",
"lon = np.linspace(10, 30, 2)\n",
"lat = np.linspace(10, 50, 3)\n",
"time = np.arange(1950,1955)\n",
"ts = da.DimArray.from_kw(np.arange(5), time=time)\n",
"cube = da.DimArray.from_kw(np.zeros((3,2,5)), lon=lon, lat=lat, time=time) # lat x lon x time\n",
"cube.axes # doctest: +ELLIPSIS"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 40,
"text": [
"dimensions: 'lat', 'lon', 'time'\n",
"0 / lat (3): 10.0 to 50.0\n",
"1 / lon (2): 10.0 to 30.0\n",
"2 / time (5): 1950 to 1954"
]
}
],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"### In combination with repeat\n",
"a.newaxis('new', values=['a','b'],pos=1) # repeat 2 times along the first axis"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 41,
"text": [
"dimarray: 4 non-null elements (0 null)\n",
"dimensions: 'lon', 'new'\n",
"0 / lon (2): 30.0 to 40.0\n",
"1 / new (2): a to b\n",
"array([[0, 0],\n",
" [1, 1]])"
]
}
],
"prompt_number": 41
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Broadcast"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# broadcast along new axes (reshape + repeat array)\n",
">>> ts3D = ts.broadcast(cube) # lat x lon x time\n",
"ts3D"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 42,
"text": [
"dimarray: 30 non-null elements (0 null)\n",
"dimensions: 'lat', 'lon', 'time'\n",
"0 / lat (3): 10.0 to 50.0\n",
"1 / lon (2): 10.0 to 30.0\n",
"2 / time (5): 1950 to 1954\n",
"array([[[0, 1, 2, 3, 4],\n",
" [0, 1, 2, 3, 4]],\n",
"\n",
" [[0, 1, 2, 3, 4],\n",
" [0, 1, 2, 3, 4]],\n",
"\n",
" [[0, 1, 2, 3, 4],\n",
" [0, 1, 2, 3, 4]]])"
]
}
],
"prompt_number": 42
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Align arrays"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Align dimensions"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Keep new axes as singleton dimensions\n",
"x = da.DimArray(np.arange(2), dims=('x0',))\n",
"y = da.DimArray(np.arange(3), dims=('x1',))\n",
"da.align_dims(x, y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 43,
"text": [
"[dimarray: 2 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): 0 to 1\n",
"1 / x1 (1): None to None\n",
"array([[0],\n",
" [1]]),\n",
" dimarray: 3 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (1): None to None\n",
"1 / x1 (3): 0 to 2\n",
"array([[0, 1, 2]])]"
]
}
],
"prompt_number": 43
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Broadcast arrays: all array have same size\n",
"da.broadcast_arrays(x, y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 44,
"text": [
"[dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): 0 to 1\n",
"1 / x1 (3): 0 to 2\n",
"array([[0, 0, 0],\n",
" [1, 1, 1]]),\n",
" dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): 0 to 1\n",
"1 / x1 (3): 0 to 2\n",
"array([[0, 1, 2],\n",
" [0, 1, 2]])]"
]
}
],
"prompt_number": 44
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Align axes"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = da.DimArray([1,2,3],('x0',[1,2,3]))\n",
"b = da.DimArray([3,4],('x0',[2,4]))\n",
"da.align_axes(a, b)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 45,
"text": [
"[dimarray: 3 non-null elements (1 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (4): 1 to 4\n",
"array([ 1., 2., 3., nan]),\n",
" dimarray: 2 non-null elements (2 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (4): 1 to 4\n",
"array([ nan, 3., nan, 4.])]"
]
}
],
"prompt_number": 45
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Operations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Basic Operations "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = da.DimArray([[1,2,3],[3,4,5]],dims=('x0','x1'))\n",
"assert all(a == a)\n",
"assert all(a+2 == a + np.ones(a.shape)*2)\n",
"assert all(a+a == a*2)\n",
"assert all(a*a == a**2)\n",
"assert all((a - a.values) == a - a)\n",
"a == a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 46,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): 0 to 1\n",
"1 / x1 (3): 0 to 2\n",
"array([[ True, True, True],\n",
" [ True, True, True]], dtype=bool)"
]
}
],
"prompt_number": 46
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Operation with data alignment "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# broadcasting\n",
"x = da.DimArray(np.arange(2), dims=('x0',))\n",
"y = da.DimArray(np.arange(3), dims=('x1',))\n",
"x+y"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 47,
"text": [
"dimarray: 6 non-null elements (0 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (2): 0 to 1\n",
"1 / x1 (3): 0 to 2\n",
"array([[0, 1, 2],\n",
" [1, 2, 3]])"
]
}
],
"prompt_number": 47
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# axis alignment\n",
"z = da.DimArray([0,1,2],('x0',[0,1,2]))\n",
"x+z"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 48,
"text": [
"dimarray: 2 non-null elements (1 null)\n",
"dimensions: 'x0'\n",
"0 / x0 (3): 0 to 2\n",
"array([ 0., 2., nan])"
]
}
],
"prompt_number": 48
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# or both\n",
"(x+y)+(x+z)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 49,
"text": [
"dimarray: 6 non-null elements (3 null)\n",
"dimensions: 'x0', 'x1'\n",
"0 / x0 (3): 0 to 2\n",
"1 / x1 (3): 0 to 2\n",
"array([[ 0., 1., 2.],\n",
" [ 3., 4., 5.],\n",
" [ nan, nan, nan]])"
]
}
],
"prompt_number": 49
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Numpy Transformations"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.random.seed(0)\n",
"v = da.DimArray(randn(5,7), {'time':arange(1950,1955), 'lat':linspace(-90,90,7)})"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 50
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Basic transforms: reduce axis"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"v.sum() # sum over all axes\n",
"v.sum(axis=0) # sum over first axis\n",
"v.sum(axis='time') # named axis\n",
"v.prod(axis='time') # named axis\n",
"v.mean(axis='time') # named axis\n",
"v.var(axis='time') # named axis\n",
"v.std(axis='time') # named axis\n",
"v.median(axis='time') # named axis\n",
"v.min(axis='time') # named axis\n",
"v.max(axis='time') # named axis\n",
"v.ptp(axis='time') # named axis\n",
"v.all(axis='time') # named axis\n",
"v.any(axis='time') # named axis"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 51,
"text": [
"dimarray: 7 non-null elements (0 null)\n",
"dimensions: 'lat'\n",
"0 / lat (7): -90.0 to 90.0\n",
"array([ True, True, True, True, True, True, True], dtype=bool)"
]
}
],
"prompt_number": 51
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"locmin/locmax as dimarray equivalent of argmin/argmax: return axis value "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"v.locmin(axis='time') \n",
"v.locmin() # over all axes\n",
"v.locmax(axis='time') \n",
"v.locmax() # over all axes\n",
"v.locmax(axis='time')\n",
"assert v[v.locmax()] == v.max(), \"problem with locmax/max\"\n",
"assert v[v.locmin()] == v.min(), \"problem with locmin/min\"\n",
"res = np.array([v.ix[i][ix] for i, ix in enumerate(v.locmax(axis=1).values)])\n",
"assert np.all(res == v.max(axis=1)), \"problem with locmax/max\"\n",
"v.locmax()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 52,
"text": [
"(1953, 0.0)"
]
}
],
"prompt_number": 52
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"cumulative transformation"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"v.cumsum() # last axis\n",
"v.cumsum(axis=None) # return numpy array\n",
"assert np.all(v.cumsum(axis=-1) == v.cumsum()), \"default last axis\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 53
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"new diff method"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"v.diff(axis='time', keepaxis=False)\n",
"v.diff(axis=0, keepaxis=False, scheme='centered')\n",
"v.diff(axis=0, keepaxis=False, scheme='backward')\n",
"v.diff(axis=0, keepaxis=False, scheme='forward')\n",
"v.diff(axis=0, keepaxis=True, scheme='backward')\n",
"v.diff(axis=0, keepaxis=True, scheme='forward')\n",
"v.diff(n=2,axis=('time'), scheme='centered')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 54,
"text": [
"dimarray: 21 non-null elements (0 null)\n",
"dimensions: 'time', 'lat'\n",
"0 / time (3): 1951.0 to 1953.0\n",
"1 / lat (7): -90.0 to 90.0\n",
"array([[ 2.51063 , 0.94026924, 1.65162005, 1.74764779, -0.72792132,\n",
" -3.35344907, -1.84625143],\n",
" [-0.38546508, 0.09386869, -3.31972466, 2.82411472, -0.62622757,\n",
" 2.51498772, 5.0404708 ],\n",
" [ 0.66940526, 0.0741607 , 3.13335654, -4.36650499, 2.3340133 ,\n",
" -2.92640924, -2.52653427]])"
]
}
],
"prompt_number": 54
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# CHECK AGAINST PANDAS\n",
"assert np.all(v.std(ddof=1, axis=0).values==v.to_pandas().std().values), \"std vs pandas\"\n",
"assert np.sum((v.var(ddof=1, axis=0).values-v.to_pandas().var().values)**2)<1e-10, \"var vs pandas\"\n",
"assert np.all(v.cumsum(axis=0).values == v.to_pandas().cumsum().values), \"error against pandas\"\n",
"assert np.all(v.cumprod(axis=0).values == v.to_pandas().cumprod().values), \"error against pandas\"\n",
"assert np.nansum((v.diff(axis=0, keepaxis=True).cumsum(axis=0).values - v.to_pandas().diff().cumsum().values)**2) \\\n",
" < 1e-10, \"error against pandas\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 55
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Dataset"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Aggregate several datasets to a Dataset object, it will automatically align the data"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import dimarray as da\n",
"seed(0)\n",
"mymap = da.DimArray.from_kw(randn(50,7), lon=linspace(-180,180,50), lat=linspace(-90,90,7))\n",
"ts = da.DimArray(np.arange(5), ('time',arange(1950,1955)))\n",
"ts2 = da.DimArray(np.arange(10), ('time',arange(1950,1960)))\n",
"\n",
"# Define a Dataset made of several variables\n",
"data = da.Dataset({'ts':ts, 'ts2':ts2, 'mymap':mymap})\n",
"data = da.Dataset([ts, ts2, mymap], keys=['ts','ts2','mymap'])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 56
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Data have been automatically aligned, while keeping the same shape"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"assert np.all(data['ts'].time == data['ts2'].time),\"Dataset: pb data alignment\" \n",
"data['ts']"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 57,
"text": [
"dimarray: 5 non-null elements (5 null)\n",
"dimensions: 'time'\n",
"0 / time (10): 1950 to 1959\n",
"array([ 0., 1., 2., 3., 4., nan, nan, nan, nan, nan])"
]
}
],
"prompt_number": 57
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Can also add any other data as long as it is aligned with the dataset"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data['test'] = da.DimArray([0],('source',['greenland'])) # new axis\n",
"try:\n",
" data['test2'] = da.DimArray([0,3],('source',['greenland','antarctica']))\n",
"except Exception, msg:\n",
" print msg\n",
"data\n",
"## TODO: \"expand\" Dataset (such as reindex_axis)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"axes values do not match, align data first.\t\t\t \n",
"Dataset: source(1)=greenland:greenland, \n",
"Got: source(2)=greenland:antarctica\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 58,
"text": [
"Dataset of 4 variables\n",
"dimensions: 'time', 'lon', 'lat', 'source'\n",
"0 / time (10): 1950 to 1959\n",
"1 / lon (50): -180.0 to 180.0\n",
"2 / lat (7): -90.0 to 90.0\n",
"3 / source (1): greenland to greenland\n",
"ts: time\n",
"ts2: time\n",
"mymap: lon, lat\n",
"test: source"
]
}
],
"prompt_number": 58
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Export to a DimArray\n",
"print data.to_array()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"dimarray: 12250 non-null elements (1750 null)\n",
"dimensions: 'items', 'time', 'lon', 'lat', 'source'\n",
"0 / items (4): ts to test\n",
"1 / time (10): 1950 to 1959\n",
"2 / lon (50): -180.0 to 180.0\n",
"3 / lat (7): -90.0 to 90.0\n",
"4 / source (1): greenland to greenland\n",
"array(...)\n"
]
}
],
"prompt_number": 59
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##NetCDF I/O"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from dimarray import DimArray, summary_nc, read_nc\n",
"a = DimArray([1,2], dims='xx0')\n",
"b = DimArray([3,4,5], dims='xx1')\n",
"a.write_nc(\"test.nc\",\"a\", mode='w')\n",
"b.write_nc(\"test.nc\",\"b\", mode='a')\n",
"data = read_nc(\"test.nc\")\n",
"data"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"write to test.nc\n",
"write to"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" test.nc\n",
"read from"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" test.nc\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 60,
"text": [
"Dataset of 2 variables\n",
"dimensions: u'xx0', u'xx1'\n",
"0 / xx0 (2): 0 to 1\n",
"1 / xx1 (3): 0 to 2\n",
"a: xx0\n",
"b: xx1"
]
}
],
"prompt_number": 60
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A real-data example"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"path=\"/media/Data/Data/All/Etopo/Etopo5.cdf\"\n",
"import dimarray.io.nc as ncio; reload(ncio) \n",
"import dimarray as da\n",
"print da.summary_nc(path)\n",
"da.read_nc(path, \"elev\", indices={\"X\":slice(0.0,10), \"Y\":slice(80., 70)}, tol=0.1)\n",
"#da.read_nc(path, \"elev\", indices={\"X\":slice(10), \"Y\":slice(-10,None)}, numpy_indexing=True)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"/media/Data/Data/All/Etopo/Etopo5.cdf:\n",
"-------------------------------------\n",
"Dataset of 1 variable\n",
"dimensions: u'Y', u'X'\n",
"0 / Y (2160): 90.0 to -89.9166641235\n",
"1 / X (4320): 0.0 to 359.916656494\n",
"elev : Y, X\n",
"None\n",
"read from"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" /media/Data/Data/All/Etopo/Etopo5.cdf\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 61,
"text": [
"dimarray: 14641 non-null elements (0 null)\n",
"dimensions: u'Y', u'X'\n",
"0 / Y (121): 80.0 to 70.0\n",
"1 / X (121): 0.0 to 10.0\n",
"array(...)"
]
}
],
"prompt_number": 61
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### From a DimArray"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"seed(0)\n",
"v = da.DimArray(randn(5,7,2), [(\"time\",np.arange(1950,1955)), (\"lat\",np.linspace(-90,90,7)), (\"items\",np.array(['greenland','antarctica']))])\n",
"v"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 62,
"text": [
"dimarray: 70 non-null elements (0 null)\n",
"dimensions: 'time', 'lat', 'items'\n",
"0 / time (5): 1950 to 1954\n",
"1 / lat (7): -90.0 to 90.0\n",
"2 / items (2): greenland to antarctica\n",
"array([[[ 1.76405235, 0.40015721],\n",
" [ 0.97873798, 2.2408932 ],\n",
" [ 1.86755799, -0.97727788],\n",
" [ 0.95008842, -0.15135721],\n",
" [-0.10321885, 0.4105985 ],\n",
" [ 0.14404357, 1.45427351],\n",
" [ 0.76103773, 0.12167502]],\n",
"\n",
" [[ 0.44386323, 0.33367433],\n",
" [ 1.49407907, -0.20515826],\n",
" [ 0.3130677 , -0.85409574],\n",
" [-2.55298982, 0.6536186 ],\n",
" [ 0.8644362 , -0.74216502],\n",
" [ 2.26975462, -1.45436567],\n",
" [ 0.04575852, -0.18718385]],\n",
"\n",
" [[ 1.53277921, 1.46935877],\n",
" [ 0.15494743, 0.37816252],\n",
" [-0.88778575, -1.98079647],\n",
" [-0.34791215, 0.15634897],\n",
" [ 1.23029068, 1.20237985],\n",
" [-0.38732682, -0.30230275],\n",
" [-1.04855297, -1.42001794]],\n",
"\n",
" [[-1.70627019, 1.9507754 ],\n",
" [-0.50965218, -0.4380743 ],\n",
" [-1.25279536, 0.77749036],\n",
" [-1.61389785, -0.21274028],\n",
" [-0.89546656, 0.3869025 ],\n",
" [-0.51080514, -1.18063218],\n",
" [-0.02818223, 0.42833187]],\n",
"\n",
" [[ 0.06651722, 0.3024719 ],\n",
" [-0.63432209, -0.36274117],\n",
" [-0.67246045, -0.35955316],\n",
" [-0.81314628, -1.7262826 ],\n",
" [ 0.17742614, -0.40178094],\n",
" [-1.63019835, 0.46278226],\n",
" [-0.90729836, 0.0519454 ]]])"
]
}
],
"prompt_number": 62
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# writing\n",
"v.write_nc(\"test2.nc\",\"myvarstr\", mode=\"w\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"write to test2.nc\n"
]
}
],
"prompt_number": 63
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# checking\n",
"da.summary_nc(\"test2.nc\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"test2.nc:\n",
"--------\n",
"Dataset of 1 variable\n",
"dimensions: u'time', u'lat', u'items'\n",
"0 / time (5): 1950 to 1954\n",
"1 / lat (7): -90.0 to 90.0\n",
"2 / items (2): greenland to antarctica\n",
"myvarstr : time, lat, items\n"
]
}
],
"prompt_number": 64
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# reading\n",
"w = da.read_nc(\"test2.nc\")\n",
"assert np.all(w['myvarstr'] == v), \"Problem when reading netcdf\"\n",
"w"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"read from test2.nc\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 65,
"text": [
"Dataset of 1 variable\n",
"dimensions: u'time', u'lat', u'items'\n",
"0 / time (5): 1950 to 1954\n",
"1 / lat (7): -90.0 to 90.0\n",
"2 / items (2): greenland to antarctica\n",
"myvarstr: time, lat, items"
]
}
],
"prompt_number": 65
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### From/To Dataset"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data.write('test3.nc')\n",
"da.summary_nc('test3.nc')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"write to test3.nc\n",
"test3.nc:\n",
"--------"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Dataset of 6 variables\n",
"dimensions: u'time', u'lon', u'lat', u'source', u'xx0', u'xx1'\n",
"0 / time (10): 1950 to 1959\n",
"1 / lon (50): -180.0 to 180.0\n",
"2 / lat (7): -90.0 to 90.0\n",
"3 / source (1): greenland to greenland\n",
"4 / xx0 (2): 0 to 1\n",
"5 / xx1 (3): 0 to 2\n",
"ts : time\n",
"ts2 : time\n",
"mymap : lon, lat\n",
"test"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" : source\n",
"a : xx0\n",
"b : xx1\n"
]
}
],
"prompt_number": 66
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##Experimental Features"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Group / Ungroup"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import dimarray as da"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 67
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> np.random.seed(0)\n",
">>> v = da.DimArray.from_kw(randn(2,5,180), time=arange(1950,1955), lat=linspace(-90,90,180), items=array(['greenland','antarctica']))\n",
"#axes = v.axes[('time','lat')]\n",
"#ax.GroupedAxis(*[v.axes[k] for k in ('time','lat')])\n",
"print v\n",
"\n",
"# group time, lat\n",
">>> w = v.group(('time','lat'))\n",
"print \"\\nBasic grouping:\\n\\n\", w\n",
"\n",
"# group dimensions and insert as first dimension\n",
">>> w = v.group(('time','lat'), insert=0) \n",
"print \"\\nGroup + insert as first:\\n\\n\", w\n",
"\n",
"# group and ungroup\n",
">>> v2 = v.group(('time','items')).ungroup()\n",
"print \"\\ngroup/ungroup no reshaping:\", np.all(v2 == v)\n",
"print \"\\ngroup/ungroup with reshaping:\", np.all(v2.reshape(v.dims) == v)\n",
"\n",
"# grouping in transformations\n",
">>> res = v.mean(axis=('time','lat'))\n",
"print \"\\nmean with grouping time,lat grouping:\\n\\n\",res"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"dimarray: 1800 non-null elements (0 null)\n",
"dimensions: 'items', 'time', 'lat'\n",
"0 / items (2): greenland to antarctica\n",
"1 / time (5): 1950 to 1954\n",
"2 / lat (180): -90.0 to 90.0\n",
"array(...)\n",
"\n",
"Basic grouping:\n",
"\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"dimarray: 1800 non-null elements (0 null)\n",
"dimensions: 'items', 'time,lat'\n",
"0 / items (2): greenland to antarctica\n",
"1 / time,lat (900): (1950, -90.0) to (1954, 90.0)\n",
"array(...)\n",
"\n",
"Group + insert as first:\n",
"\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"dimarray: 1800 non-null elements (0 null)\n",
"dimensions: 'time,lat', 'items'\n",
"0 / time,lat (900): (1950, -90.0) to (1954, 90.0)\n",
"1 / items (2): greenland to antarctica\n",
"array(...)\n",
"\n",
"group/ungroup no reshaping:"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" False\n",
"\n",
"group/ungroup with reshaping: True"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"mean with grouping time,lat grouping:\n",
"\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"dimarray: 2 non-null elements (0 null)\n",
"dimensions: 'items'\n",
"0 / items (2): greenland to antarctica\n",
"array([-0.06849458, 0.04075616])\n"
]
}
],
"prompt_number": 68
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Weighted mean"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Each axis can have a `weights` attribute. If not None, it will be automatically used when computing mean, var, std"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> np.random.seed(0)\n",
">>> data = da.DimArray(randn(7), ('lat',linspace(-90,90,7)))\n",
"\n",
">>> umean = data.mean(axis='lat')\n",
"print \"\\nunweighted zonal mean:\\n\\n\", umean\n",
"\n",
"# now add weights\n",
">>> data.axes['lat'].weights = lambda x: np.cos(np.radians(x))\n",
"\n",
">>> wmean = data.mean(axis='lat')\n",
"print \"\\nweighted zonal mean:\\n\", wmean\n",
"\n",
">>> wmean = data[:].mean(axis='lat')\n",
"print \"\\nweighted zonal mean after [:]:\\n\", wmean\n",
"\n",
">>> test = data.mean(axis='lat', weights=None) \n",
"print \"\\nCHECK:\", test == umean"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"unweighted zonal mean:\n",
"\n",
"1.03202989506\n",
"\n",
"weighted zonal mean:\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1.18361129352\n",
"\n",
"weighted zonal mean after [:]:\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1.18361129352\n",
"\n",
"CHECK:"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" True\n"
]
}
],
"prompt_number": 69
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Weighted mean with grouping\n",
"#>>> mymap[mymap.lon > 0])\n",
"#lon=linspace(-180,180,50), \n",
"mymap = data.reshape(('lat','lon')).repeat(linspace(-180,180,5), axis='lon')\n",
"mymap.values[:,0] = np.nan\n",
"#>>> print mymap\n",
"#lon=linspace(-180,180,50)\n",
"wmean = mymap.mean()\n",
"print \"\\nNaN + flatten all:\\n\",umean\n",
"#>>> wmean = mymap.mean(axis=('lon','lat'))\n",
"wmean = mymap.mean(axis='lon').mean(axis='lat')\n",
"print \"\\nNaN + sequential:\\n\",wmean\n",
"cube = da.DimArray(randn(50,7,5), [('lon',linspace(-180,180,50)), (\"lat\",linspace(-90,90,7)), ('time',arange(1950,1955))])\n",
"cube.axes['lat'].weights = lambda x: np.cos(np.radians(x))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"NaN + flatten all:\n",
"1.03202989506\n",
"\n",
"NaN + sequential:\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1.18361129352\n"
]
}
],
"prompt_number": 70
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Interpolation"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"time=np.linspace(1950,1955,8)\n",
"v = da.DimArray.from_kw(cos(time), time=time)\n",
"#w = v.reindex_axis(arange(1940,1960), axis='time') \n",
"w = da.interp1d(v, np.linspace(1948,1957,10), axis='time')\n",
"#%matplotlib inline\n",
"clf()\n",
"plot(v.time, v.values, label='original')\n",
"plot(w.time, w.values, label='interp')\n",
"legend()\n",
"show()\n",
"draw()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nYII=\n",
"text": [
"<matplotlib.figure.Figure at 0xa28fd8c>"
]
},
{
"metadata": {},
"output_type": "display_data",
"text": [
"<matplotlib.figure.Figure at 0xa21bc8c>"
]
}
],
"prompt_number": 71
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###Export to other formats"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"#reload(da) # for dict\n",
"v = da.DimArray.from_kw(randn(2,5,7), time=arange(1950,1955), lat=linspace(-90,90,7), items=array(['greenland','antarctica']))\n",
"#reload(co) # for dict\n",
"\n",
"print \"\\nExport to pandas\\n\"\n",
"print v.to_pandas()\n",
"print \"\\nExport to larry\\n\"\n",
"print v.to_larry()\n",
"print \"\\nExport to Dataset\\n\"\n",
"print v.to_dict()\n",
"#v.to_MaskedArray() # to masked array"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Export to pandas\n",
"\n",
"<class 'pandas.core.panel.Panel'>\n",
"Dimensions: 2 (items) x 5 (major_axis) x 7 (minor_axis)\n",
"Items axis: greenland to antarctica\n",
"Major_axis axis: 1950 to 1954\n",
"Minor_axis axis: -90.0 to 90.0"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"Export to larry\n",
"\n",
"warning: dimension names have not been passed to larry"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"label_0\n",
" greenland\n",
" antarctica\n",
"label_1\n",
" 1950\n",
" 1951\n",
" 1952\n",
" 1953\n",
" 1954\n",
"label_2\n",
" -90.0\n",
" -60.0\n",
" -30.0\n",
" 0.0\n",
" 30.0\n",
" 60.0\n",
" 90.0\n",
"x\n",
"array([[[ 0.02429091, 1.27981202, -0.88596648, 0.40088568, -0.00965724,\n",
" -1.79716462, -0.80225317],\n",
" [ 0.19321355, 1.29734209, 1.00133102, 0.5972125 , -0.81527566,\n",
" 1.80121399, 0.21524047],\n",
" [-1.00636552, -0.18290498, 0.89624843, 0.0076175 , 0.88686469,\n",
" 1.10369396, 0.40053068],\n",
" [-0.85770262, 0.13545466, 0.04516586, 1.85934633, -1.62632194,\n",
" -0.13482245, -0.58409355],\n",
" [ 0.33510562, -2.43756436, 1.11492456, 0.01374849, -1.84470116,\n",
" -0.36111313, 0.60896234]],\n",
"\n",
" [[-1.59144788, 0.00322222, -1.05747365, -0.55598503, 0.02673838,\n",
" 0.18345025, -0.4707425 ],\n",
" [ 0.27279639, 0.81797761, -0.27891428, 1.43156776, 1.46221417,\n",
" -0.42870207, -0.63784056],\n",
" [-1.66417299, -0.12656933, -0.36343778, 0.77905122, -1.50966161,\n",
" -0.27739139, 0.96874439],\n",
" [-0.7303571 , -0.76236154, -1.44694033, 2.62057385, -0.74747318,\n",
" -1.30034683, -0.8038504 ],\n",
" [-0.77429508, -0.26938978, 0.82537223, -0.29832317, -0.92282331,\n",
" -1.4513385 , 0.02185736]]])\n",
"\n",
"Export to Dataset\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Dataset of 2 variables\n",
"dimensions: 'time', 'lat'\n",
"0 / time (5): 1950 to 1954\n",
"1 / lat (7): -90.0 to 90.0\n",
"greenland: time, lat\n",
"antarctica: time, lat"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 72
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##doctest framework"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from dimarray import testing\n",
"testing.test_all()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"\n",
"============================\n",
"TEST dimarray.core.metadata\n",
"============================\n",
"\n",
"\n",
"\n",
"\n",
"============================\n",
"TEST dimarray.core.core\n",
"============================\n",
"\n",
"\n",
"\n",
"\n",
"============================"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"TEST dimarray.core.axes\n",
"============================\n",
"\n",
"\n",
"\n",
"\n",
"============================"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"TEST dimarray.core._indexing\n",
"============================\n",
"\n",
"\n",
"\n",
"\n",
"============================"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"TEST dimarray.core._transform\n",
"============================\n",
"\n",
"\n",
"\n",
"\n",
"============================"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"TEST dimarray.core._reshape\n",
"============================\n",
"\n",
"\n"
]
}
],
"prompt_number": 73
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment