Skip to content

Instantly share code, notes, and snippets.

@AlexHilson
Created September 5, 2017 17:14
Show Gist options
  • Save AlexHilson/c33dadddfb19723512ae4e6325f2e344 to your computer and use it in GitHub Desktop.
Save AlexHilson/c33dadddfb19723512ae4e6325f2e344 to your computer and use it in GitHub Desktop.
Merge 4 model runs of data into one object
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import iris\n",
"import numpy as np\n",
"iris.FUTURE.netcdf_promote = True"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"cubes = iris.load('./*.nc')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<iris 'Cube' of dew_point_temperature / (K) (realization: 12; time: 58; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 12; time: 58; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 12; time: 58; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 12; time: 58; latitude: 600; longitude: 800)>]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cubes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## the problem"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import seaborn as sns\n",
"sns.set()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"realizations = [c.coord('realization').points for c in cubes]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int32),\n",
" array([ 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], dtype=int32),\n",
" array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int32),\n",
" array([ 0, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], dtype=int32)]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"realizations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- all cubes contain the 0 realization + 11 other realizations"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10e2127b8>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nRFHExx9/jJkzZzr8kQAA//Vf/4WdO3fi17/+NR588EEMHz4cn376Kd5991088MADCAwM7NV/o9jY\nWERHR+O5556DwWBAQkICCgoKsH//ftx77729eg8ib8PiJ5JZ14lrXY0YMQI///nPsXXrVvz973/H\niy++iNdffx27du3CK6+8gmHDhuFHP/oRli9fDkEQEBgYiI0bN2LNmjV46KGH7HMH/vd//xf33HMP\njh8/jlmzZnXbZ9eV/Pbt2wdBEPDSSy91y5OVlYVt27b1ah/Z2dmYPn06Xn75ZXz55Zf2U+6d+/H1\n9cWOHTvwpz/9Ca+++ioMBgNGjhyJ559/HrfffrvTbD3ZsGGD/X0aGxsRExODBx980OGWQCL6hiD2\nZcYPrq7B/dxzz+HIkSPw9fXFD3/4QzzyyCNQq9VYvXo1duzYAUEQIIoiBEHAk08+6XDbDxEREcmn\nz0f8y5Ytg1arxc6dO6HX67Fy5UoolUo89thjKC4uxqOPPurwF3tvT9kRERHRwOvT5L7i4mLk5+fj\nhRdeQFJSEjIzM7Fs2TJ88MEHAICioiKkpqYiPDzc/u/7VgojIiIi6fSp+CMiIrBlyxaHW21EUURL\nSwsMBgNqamrsC44QERGR5+lT8QcFBWH69On216IoYseOHZg2bRqKi4shCAI2btyInJwc3HrrrXxQ\nBhERkYfp16z+NWvW4Pz589i9ezfOnDkDhUKBpKQkLFq0CEePHsWqVasQGBiIuXPnuisvERER9UOf\nZ/V3Wrt2Lf72t7/hlVdesRd7c3Oz/cEaALB69WpcvnwZb775Zq/ft/NuACIiInI/l474n332Weza\ntQtr1651OJrvWvoAMHLkyO98DrgzDQ1GKBQsfiIior4KDQ343q/pc/Hn5uZi165dWLduHa6//nr7\n+KuvvopTp05h69at9rHCwkL7ozx7y2YTYbO5dBKCiIiIvkefJvcVFRVh48aNWLp0KTIyMlBXV2f/\nN3v2bBw7dgxbt25FeXk5du7ciT179uDuu+8eqOxERETUR326xr9582asW7fOYazzmnxhYSH27duH\n9evXo7S0FHFxcXj44Yf7PLFPp2v5/i8iIiKibiIigr73a1ye3DdQWPxERESu6U3x87G8REREXoTF\nT0RE5EVY/ERERF6ExU9ERORFWPxERERehMVPRETkRVj8REREXoTFT0RE5EVY/ERERF6ExU9ERORF\n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\n5aZSGRJRf1hbjWj8+N/dxi319Wg68Ln0gajfjh0ssZd+J6tVxPFDJfIE8iBuPeLXaDTdCr7ztV8v\nb4lRKAQoFII7Y3mE0hrncxeM7RbUt5gQH8kjisGkwljZ47ZyYyVGhY+QMA31l7mmCmIPByem0hKo\nVFxrY7DRVTv/naurbvH6n6dbiz8qKgp6vR42mw0KxdX/sHV1dfD19UVwcO+uq4SFBUAQhl7xD48K\nwtnLDd3GVUoFRsSHIshf7eS7yFNdMywGuOR8W2JELEJDA6QNRP3iPyIeJQoF4ORRvEHx/HkORtow\nfzTUGbuNh4YHeP3P063Fn5KSApVKhby8PEycOBEAcPz4cYwbN67X79HQYBySR/wz0qLx6bEyWKyO\np56uGx8Di6kDjaYOmZKRK5IDkhHuG4r69kaH8ZiASCT6JqKxsfsvHPJgKj8ET5qE5qNHHYYFtRr+\nU2fw5zkIjc+Kw+f/uthtPG1S3JD+efbmjxq3L+Dz1FNP4eTJk3j++edRU1ODxx9/HC+++CLmzp3b\nq+8fyrfznblcj7c+K0J5rQG+aiVmpsfiv2dxyd7Bqq6tHrsuvofC+osQBAFp4SlYMPo2aDXePXFo\nsLKZTND98x9oPnwIotkMTeIIRCy4C/7Jo+WORi46fawceUfK0WowIzBYg8xp1yB1QqzcsQaULCv3\ntbe34+mnn8ZHH32EoKAg3H333Vi0aFGvv38oF3+n1vYOqH2ULPwhwmQ1QwCgVvJyzVAgWiywmc1Q\n+vPhWUOBKIowmyxQa1RD8jLyt8lS/P3lDcVPREQ0EHpT/DzkJCIi8iIsfiIiIi/C4iciIvIiLH4i\nIiIvwuInIiLyIix+IiIiL8LiJyIi8iIsfiIiIi/C4iciIvIiLH4iIiIvwuInIiLyIix+IiIiL8Li\nJyIi8iIsfiIiIi/C4iciIvIiLH4iIiIvwuInIiLyIix+IiIiL8LiJyIi8iIsfiIiIi/C4iciIvIi\nLH4iIiIvwuInIiLyIix+IiIiL8LiJyIi8iIsfiIiIi/C4iciIvIiLH4iIiIvwuInIiLyIix+IiIi\nL8LiJyIi8iIsfiIiIi/C4iciIvIiLH4iIiIvwuInIiLyIix+IiIiL8LiJyIi8iIsfiIiIi/C4ici\nIvIiLH4iIiIvonLnmxUWFuL222+HIAgQRREAMG7cOOzevduduyEiIiIXubX4L126hNTUVGzZssVe\n/CqVW3dBRERE/eDWVi4qKsLIkSMRFhbmzrclIiIiN3HrNf6ioiIkJia68y2JiIjIjdx+xG+z2TBv\n3jwYDAbMmDEDv/nNbxAYGOjO3RAREZGLBLHzYnwvmEwm1NTUON0WFhaGKVOm4LrrrsODDz6I5uZm\nPP/880hISMCGDRt6Hai+3gCFQuj11xMREdFVoaEB3/s1fSr+o0eP4uc//zkEoXsx5+bmYsqUKfD1\n9YVSqQQAnD17FnfccQcOHjyIiIiIPkQnIiKigdCnU/2TJ0/G+fPne/31SUlJAICamhoWPxERkQdw\n2+S+oqIiTJw4EZWVlfaxc+fOQaVS4ZprrnHXboiIiKgf3Fb8I0eORGJiIlatWoWvvvoKx48fx+9/\n/3v8+Mc/RlBQkLt2Q0RERP3Qp2v836empgbPPfccjhw5AkEQMH/+fDz22GPw8fFx1y6IiIioH9xa\n/EREROTZ+JAeIiIiL8LiJyIi8iIsfiIiIi/C4iciIvIiLH4iIiIvwuKXkNlsxsqVK5GVlYUZM2Zg\n69atckciNzGbzZg3bx6OHTsmdxTqh5qaGixbtgzZ2dnIycnBiy++CLPZLHcsclFZWRmWLFmCjIwM\nzJkzB2+++abckTyCW5/OR9/tpZdewrlz57B9+3ZUVFTgt7/9LeLi4nDDDTfIHY36wWw245FHHsGl\nS5fkjkL9tGzZMmi1WuzcuRN6vR4rV66EUqnEY489Jnc06iNRFLF06VKkp6fj/fffR0lJCR555BFE\nR0fjlltukTuerHjEL5G2tjbs3r0bTz75JMaMGYO5c+fi7rvvxo4dO+SORv1QVFSEBQsWoKKiQu4o\n1E/FxcXIz8/HCy+8gKSkJGRmZmLZsmX44IMP5I5GLqirq0NqaiqeeuopJCQkYObMmZg6dSpOnDgh\ndzTZsfglcv78eVitVkyYMME+lpmZifz8fBlTUX8dPXoUU6dOxa5du8C1sAa3iIgIbNmyBWFhYfYx\nURTR0tIiYypyVUREBF5++WX4+/sDAE6cOIFjx44hOztb5mTy46l+ieh0Omi1WqhU3/wnDw8Ph8lk\nQmNjI0JDQ2VMR65auHCh3BHITYKCgjB9+nT7a1EUsWPHDkybNk3GVOQOc+bMQVVVFWbNmsVLq+AR\nv2Ta2tqgVqsdxjpfc/IQkedZs2YNzp8/j4cffljuKNRPf/7zn7Fp0yYUFhbiueeekzuO7Fj8EtFo\nNN0KvvO1n5+fHJGIqAdr167F9u3b8cc//hFJSUlyx6F+Gjt2LHJycvDEE0/gn//8JywWi9yRZMXi\nl0hUVBT0ej1sNpt9rK6uDr6+vggODpYxGRF19eyzz+Jvf/sb1q5di7lz58odh1xUX1+PTz75xGHs\n2muvRUdHBwwGg0ypPAOLXyIpKSlQqVTIy8uzjx0/fhzjxo2TMRURdZWbm4tdu3Zh3bp1+OEPfyh3\nHOqHiooKPPjgg6itrbWPFRQUICwsDFqtVsZk8mPxS8TX1xe33nornnrqKRQUFOCTTz7B1q1b8T//\n8z9yRyMiXL01c+PGjVi6dCkyMjJQV1dn/0eDT1paGsaNG4eVK1eiqKgI+/fvxx//+Efcd999ckeT\nnSDyHiTJtLe34+mnn8ZHH32EoKAg3H333Vi0aJHcschNUlJSsG3bNmRlZckdhVywefNmrFu3zmFM\nFEUIgoDCwkKZUlF/6HQ6PPvsszh8+DD8/Pzws5/9DEuXLpU7luxY/ERERF6Ep/qJiIi8CIufiIjI\ni7D4iYiIvAiLn4iIyIuw+ImIiLwIi5+IiMiLsPiJiIi8CIufiIjIi7D4iYiIvAiLn4iIyIuw+ImI\niLzI/weqg2E5bHZFWQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10e16b6d8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.stripplot(data=realizations).set_title('Realizations')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- some time points overlap, some don't"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10e36d8d0>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nFOD666/HlVdeeULfz79+zJe+9CW8+uqrWLt2La677jp8+9vfxj333IPt27dj3bp1UBQFixcvxo4d\nO3jKh0hGPwFHjx7V161bpy9dulQ/44wz9DvuuEMPhUK6ruv6rbfeqs+cOVMvKysb/t/HH398+HNf\nf/11/aKLLtLnzZunf+Mb39CPHDlyIl9a6MEHH9TXr18//Pfm5mb9yJEjw3/WrVunr1u3Tvq1nnnm\nGf38888fMXbeeefpf/jDH3Rd1/ULLrhAf/jhh4fn+vv79cWLF+uvvPKKruu6/j//8z96WVmZ/thj\nj436t5988kn9C1/4gq5p2vDYs88+q2/cuFHXdV1fv369vmHDhhGfc/XVV+t33nnnifwnICIiipkT\n2lNw3XXXIRQK4cknn8Qvf/lLvPzyy7j//vsBfLRGfv311+O1117D66+/jtdee214Pa+lpQVr167F\nqlWrsGvXLvh8vhE7+0/WtddeizvuuGP477m5ucOlYQsLC5GYmIjExMQRO/w7OjoQCoUAAOeffz76\n+/tx++23o7q6GrfddhsCgcDwcan//M//xPbt2/HKK6/g8OHDuOGGG1BUVIQzzjgDPT09uPXWW7Fy\n5UpceOGF6OjoGP6j6zouvvhiBINB3HzzzaipqcErr7yC22+/HRkZGQCAc845B88//zyeffZZHDly\nBA899BD27t2L1atXj/u/CxER0Uk53uyhurpaLysr0zs7O4fHXnjhBf2MM87QdV3XzzjjDP31118X\nfu7999+vr169evjvgUBAX7hwob579+6TzGWOz/r160c8SdB1XZ85c+bwkwBd1/X9+/frl156qT5v\n3jz9iiuu0CsrK4fnNE3Tt27dqp999tn6/Pnz9WuvvVZva2vTdV3X//jHP+plZWUj/nz8hKSpqUnX\ndV2vqKjQv/a1r+lz587VzzjjDP3BBx8cEcvTTz+tf/GLX9Tnzp2rf+lLX9L37NnzWf2nICIi+lTH\n3SWxv78f+/fvx+mnnz489sILL+CnP/0pXn31VSxevBh/+9vfkJeXN+pzv/nNb2L+/PlYt27d8Njq\n1auxfPny4UpnRERENLGOe/kgOTl5REKg6zoef/xxnHbaaaipqYGiKNiyZQvOPPNMXHLJJcMNSYCP\nziB/vFnvYxkZGWhtbY3Bt0BERESxcNKnD37xi1/gwIEDeOaZZ/DBBx/AZrMNlwLevXs3br75ZiQl\nJeHcc8897noARERENHFOKim4++67sWPHDmzatAnTpk3DtGnTcM455wwf85kxYwbq6urw1FNP4dxz\nz5XWAzjRY0H6v1RBIyIiotg54aTg1ltvxc6dO3H33Xfj3HPPHR7/1zf4kpISvPXWWwDk9QDKy8tP\n6Gt3dQ3CZmNSQEREdKJ8vtH9UP7VCSUFDz30EHbu3In77rsP55133vD4Aw88gH379uHRRx8dHqus\nrByugDZv3rwRxYMCgQAqKipGbDw8HpqmQ9OOa18kERERnaDj3mhYXV2NLVu2YM2aNViwYMGIc/ln\nn3023n77bTz66KNoaGjAk08+ieeeew7f+ta3AACrVq3C3r17sW3bNlRVVWHDhg2YMmUKli5d+pl9\nY0RERHRijvtI4tatW3HfffeNGPt4jb+yshJ/+9vfcP/996O+vh75+fn44Q9/OGJ54e9//zs2btyI\n1tZWLFy4ELfccgvy8/NPKNj2dnlbVSIiIpLLzEz+1I857qTACJgUEBERnZzjSQpM1zqZiIiIPhtM\nCoiIiAgAkwIiIiI6hkkBERERAWBSQERERMcwKSAiIiIATAqIiIjoGCYFREREBIBJARERER3DpICI\niIgAMCkgIiKiY5gUEBEREQAmBURERHQMkwIiIiICwKSAiIiIjmFSQERERACYFBAREdExTAqIiIgI\nAJMCIiIiOoZJAREREQFgUkBERETHMCkgIiIiAEwKiIiI6BgmBURERASASQEREREdw6SAiIiIADAp\nICIiomOYFBAREREAJgVERER0DJMCIiIiAsCkgIiIiI5hUkBEREQAmBQQEZGFaZoOXdcnOgzDcEx0\nAERERPHW1T6If7xcjcbaLjicdsyck4PPnVUCp8s+0aFNKCYFRERkKYEhFf/75LsIBsIAgLAaxQd7\nm9DfF8S/XXbKBEc3sbh8QERElnJg/9HhhOCT6qs60d05OAERGQeTAiIispTe7oB8rks+ZwVMCoiI\nyFIyspKE44oCpEvmrIJJARERWUpGtviN3+GyIynFHedojIVJARERWUrNoQ7heDgUxdHG3jhHYyw8\nfUBEdBy0sIr+3W8hVF8HZ0YWUk47HfYkaz9qNquwGpHOqWo0jpEYD5MCIqJPER0YQMPdd0Jtahwe\n6/r/XkDBDTfCnV8wgZHRySgs8aPi3ZZR43aHDbkFqRMQkXFw+YCI6FN0/emFEQkBAEQH+tH+309O\n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\n8UUItzQAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10e1f0da0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"times = [c.coord('time').points for c in cubes]\n",
"sns.stripplot(data=times).set_title('Time Points')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plan: insert masked data points so each source cube has the same number of realizations + time points"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Masking"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Define the required values of times + realizations\n",
"2. Copy data arrays and insert required fill values\n",
"3. Create new cubes from new data arrays"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### required points"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def all_points(cubes, coord):\n",
" points = np.concatenate([c.coord(coord).points for c in cubes])\n",
" return np.unique(points)\n",
" return points"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
" 17, 18, 19, 20, 21, 22], dtype=int32)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"realizations = all_points(cubes, 'realization')\n",
"realizations"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 403227., 403230., 403233., 403236., 403239., 403242.,\n",
" 403245., 403248., 403251., 403254., 403257., 403260.,\n",
" 403263., 403266., 403269., 403272., 403275., 403278.,\n",
" 403281., 403284., 403287., 403290., 403293., 403296.,\n",
" 403299., 403302., 403305., 403308., 403311., 403314.,\n",
" 403317., 403320., 403323., 403326., 403329., 403332.,\n",
" 403335., 403338., 403341., 403344., 403347., 403350.,\n",
" 403353., 403356., 403359., 403362., 403365., 403368.,\n",
" 403371., 403374., 403377., 403380., 403383., 403386.,\n",
" 403389., 403392., 403395., 403398., 403401., 403404.,\n",
" 403407., 403410., 403413., 403416.])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"times = all_points(cubes, 'time')\n",
"times"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"masked_array(data =\n",
" [[[[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" ..., \n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]]\n",
"\n",
"\n",
" [[[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" ..., \n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]]\n",
"\n",
"\n",
" [[[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" ..., \n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]]\n",
"\n",
"\n",
" ..., \n",
" [[[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" ..., \n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]]\n",
"\n",
"\n",
" [[[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" ..., \n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]]\n",
"\n",
"\n",
" [[[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" ..., \n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]\n",
"\n",
" [[-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" ..., \n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]\n",
" [-- -- -- ..., -- -- --]]]],\n",
" mask =\n",
" [[[[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" ..., \n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]]\n",
"\n",
"\n",
" [[[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" ..., \n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]]\n",
"\n",
"\n",
" [[[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" ..., \n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]]\n",
"\n",
"\n",
" ..., \n",
" [[[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" ..., \n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]]\n",
"\n",
"\n",
" [[[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" ..., \n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]]\n",
"\n",
"\n",
" [[[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" ..., \n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]\n",
"\n",
" [[ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" ..., \n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]\n",
" [ True True True ..., True True True]]]],\n",
" fill_value = 1e+20)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"required_shape = (len(realizations), len(times), 600, 800)\n",
"required_shape\n",
"empty = np.ma.masked_all(required_shape)\n",
"empty"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### fill empty array"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<iris 'Cube' of dew_point_temperature / (K) (realization: 12; time: 58; latitude: 600; longitude: 800)>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample = cubes[0]\n",
"sample"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def find_matching_indexs(cube, coord, all_values):\n",
" available = np.in1d(all_values, cube.coord(coord).points)\n",
" return np.where(available == True)[0]"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"matching_r_indexes = find_matching_indexs(sample, 'realization', realizations)\n",
"matching_r_indexes"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
" 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n",
" 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\n",
" 51, 52, 53, 54, 55, 56, 57])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"matching_t_indexes = find_matching_indexs(sample, 'time', times)\n",
"matching_t_indexes"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(12, 58, 600, 800)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sample_data = sample.data\n",
"sample_data.shape"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(23, 64, 600, 800)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_array = np.copy(empty)\n",
"new_array.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"matching_r_indexes"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(11, 64, 600, 800)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_array[matching_r_indexes[0]:matching_r_indexes[-1]].shape"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[[[ 241.74830627, 241.74433899, 241.74604797, ..., 241.74694824,\n",
" 241.7481842 , 241.7515564 ],\n",
" [ 242.03668213, 242.0426178 , 242.0289917 , ..., 242.0496521 ,\n",
" 242.04238892, 242.04290771],\n",
" [ 242.47364807, 242.47798157, 242.46995544, ..., 242.48445129,\n",
" 242.47639465, 242.52099609],\n",
" ..., \n",
" [ 250.67066956, 250.60597229, 250.62794495, ..., 250.63546753,\n",
" 250.62750244, 250.61164856],\n",
" [ 250.50508118, 250.49284363, 250.49868774, ..., 250.5194397 ,\n",
" 250.51361084, 250.39694214],\n",
" [ 250.11109924, 250.11378479, 250.11505127, ..., 250.12695312,\n",
" 250.10430908, 250.10614014]],\n",
"\n",
" [[ 241.57299805, 241.5740509 , 241.57670593, ..., 241.57128906,\n",
" 241.57395935, 241.57289124],\n",
" [ 242.02830505, 242.02433777, 242.02459717, ..., 242.02792358,\n",
" 242.02966309, 242.02540588],\n",
" [ 242.52641296, 242.53143311, 242.5032196 , ..., 242.52301025,\n",
" 242.50175476, 242.53100586],\n",
" ..., \n",
" [ 251.18089294, 251.15283203, 251.18400574, ..., 251.11914062,\n",
" 251.14703369, 251.22453308],\n",
" [ 250.73074341, 250.73225403, 250.74180603, ..., 250.66996765,\n",
" 250.71980286, 250.75570679],\n",
" [ 250.23208618, 250.1716156 , 250.21040344, ..., 250.12915039,\n",
" 250.18379211, 250.2053833 ]],\n",
"\n",
" [[ 241.60287476, 241.60623169, 241.6007843 , ..., 241.61408997,\n",
" 241.61048889, 241.60847473],\n",
" [ 242.19847107, 242.17852783, 242.17608643, ..., 242.1625824 ,\n",
" 242.20428467, 242.19322205],\n",
" [ 242.67274475, 242.65684509, 242.68066406, ..., 242.6486969 ,\n",
" 242.68795776, 242.66201782],\n",
" ..., \n",
" [ 250.38676453, 250.46958923, 250.50808716, ..., 250.22402954,\n",
" 250.39804077, 250.29582214],\n",
" [ 248.8875885 , 248.89306641, 248.77838135, ..., 248.88148499,\n",
" 248.83633423, 248.82670593],\n",
" [ 247.64826965, 247.70628357, 247.7742157 , ..., 247.66244507,\n",
" 247.76670837, 247.70681763]],\n",
"\n",
" ..., \n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]]],\n",
"\n",
"\n",
" [[[ 242.3462677 , 242.33728027, 242.33587646, ..., 242.33786011,\n",
" 242.33175659, 242.35713196],\n",
" [ 242.73143005, 242.76451111, 242.75953674, ..., 242.75006104,\n",
" 242.77770996, 242.79566956],\n",
" [ 243.13642883, 243.179245 , 243.08650208, ..., 243.212677 ,\n",
" 243.13842773, 243.17852783],\n",
" ..., \n",
" [ 251.23692322, 251.18341064, 251.20698547, ..., 251.17054749,\n",
" 251.20414734, 251.13839722],\n",
" [ 251.15611267, 251.15917969, 251.17762756, ..., 251.14477539,\n",
" 251.19459534, 251.07740784],\n",
" [ 250.90286255, 250.89703369, 250.92024231, ..., 250.91540527,\n",
" 250.91043091, 250.88407898]],\n",
"\n",
" [[ 242.45162964, 242.48841858, 242.46594238, ..., 242.44354248,\n",
" 242.470047 , 242.47613525],\n",
" [ 242.79266357, 242.77615356, 242.81082153, ..., 242.81965637,\n",
" 242.78053284, 242.8046875 ],\n",
" [ 242.66975403, 242.67985535, 242.66799927, ..., 242.67070007,\n",
" 242.66033936, 242.67970276],\n",
" ..., \n",
" [ 251.88041687, 251.86968994, 251.89111328, ..., 251.78916931,\n",
" 251.81944275, 251.86384583],\n",
" [ 250.89175415, 250.89909363, 250.95175171, ..., 250.81837463,\n",
" 250.89051819, 250.89375305],\n",
" [ 250.32189941, 250.29573059, 250.23907471, ..., 250.25445557,\n",
" 250.23843384, 250.28553772]],\n",
"\n",
" [[ 242.41035461, 242.48327637, 242.43202209, ..., 242.39537048,\n",
" 242.4604187 , 242.39677429],\n",
" [ 242.36444092, 242.34870911, 242.3493042 , ..., 242.37449646,\n",
" 242.36091614, 242.37518311],\n",
" [ 241.78686523, 241.77865601, 241.76283264, ..., 241.81924438,\n",
" 241.80802917, 241.79852295],\n",
" ..., \n",
" [ 251.31694031, 251.36633301, 251.40414429, ..., 251.20832825,\n",
" 251.25563049, 251.25389099],\n",
" [ 250.16516113, 250.25865173, 250.25663757, ..., 250.16014099,\n",
" 250.11199951, 250.18214417],\n",
" [ 247.91906738, 247.82099915, 247.8391571 , ..., 247.85560608,\n",
" 247.80090332, 247.90745544]],\n",
"\n",
" ..., \n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]]],\n",
"\n",
"\n",
" [[[ 241.1100769 , 241.11428833, 241.12220764, ..., 241.10650635,\n",
" 241.11035156, 241.11830139],\n",
" [ 241.53019714, 241.54269409, 241.53439331, ..., 241.54066467,\n",
" 241.54637146, 241.54801941],\n",
" [ 241.99378967, 241.98242188, 241.97348022, ..., 241.97149658,\n",
" 241.96653748, 241.9593811 ],\n",
" ..., \n",
" [ 251.54718018, 251.57652283, 251.6262207 , ..., 251.60475159,\n",
" 251.58731079, 251.56394958],\n",
" [ 250.92797852, 250.90757751, 250.96369934, ..., 251.02420044,\n",
" 251.01689148, 250.87908936],\n",
" [ 249.48469543, 249.49255371, 249.53044128, ..., 249.45106506,\n",
" 249.34889221, 249.47744751]],\n",
"\n",
" [[ 241.14657593, 241.15240479, 241.15336609, ..., 241.1537323 ,\n",
" 241.15586853, 241.14199829],\n",
" [ 241.70254517, 241.69917297, 241.72303772, ..., 241.71296692,\n",
" 241.70437622, 241.70193481],\n",
" [ 241.77900696, 241.80220032, 241.80357361, ..., 241.7592926 ,\n",
" 241.75257874, 241.77378845],\n",
" ..., \n",
" [ 249.47789001, 249.67657471, 249.67367554, ..., 249.55812073,\n",
" 249.54475403, 249.56341553],\n",
" [ 248.53981018, 248.56260681, 248.57719421, ..., 248.46392822,\n",
" 248.5355835 , 248.54986572],\n",
" [ 247.61395264, 247.57736206, 247.58349609, ..., 247.55976868,\n",
" 247.61355591, 247.62724304]],\n",
"\n",
" [[ 241.12828064, 241.1522522 , 241.12927246, ..., 241.14147949,\n",
" 241.14498901, 241.12754822],\n",
" [ 241.74331665, 241.71131897, 241.73809814, ..., 241.73374939,\n",
" 241.7071228 , 241.73197937],\n",
" [ 241.51957703, 241.51589966, 241.51130676, ..., 241.51930237,\n",
" 241.52890015, 241.52024841],\n",
" ..., \n",
" [ 248.15037537, 248.09188843, 248.08869934, ..., 248.00091553,\n",
" 248.03887939, 248.0296936 ],\n",
" [ 246.96992493, 246.92016602, 246.99900818, ..., 246.91679382,\n",
" 246.94657898, 246.84986877],\n",
" [ 245.51585388, 245.54760742, 245.4977417 , ..., 245.51086426,\n",
" 245.53005981, 245.52801514]],\n",
"\n",
" ..., \n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]]],\n",
"\n",
"\n",
" ..., \n",
" [[[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" ..., \n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]]],\n",
"\n",
"\n",
" [[[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" ..., \n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]]],\n",
"\n",
"\n",
" [[[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" ..., \n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]],\n",
"\n",
" [[ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" ..., \n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ],\n",
" [ 0. , 0. , 0. , ..., 0. ,\n",
" 0. , 0. ]]]])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_array[\n",
" matching_r_indexes[0]:matching_r_indexes[-1]+1,\n",
" matching_t_indexes[0]:matching_t_indexes[-1]+1, :, :] = sample_data\n",
"new_array"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(23, 64, 600, 800)"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_array.shape"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"### create new cube"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<iris 'Cube' of dew_point_temperature / (K) (-- : 23; -- : 64; -- : 600; -- : 800)>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_cube = iris.cube.Cube(\n",
" data = new_array,\n",
" standard_name = sample.standard_name,\n",
" long_name = sample.long_name,\n",
" var_name = sample.var_name,\n",
" units = sample.units,\n",
" attributes = sample.attributes,\n",
" cell_methods = sample.cell_methods,\n",
")\n",
"new_cube"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### create coords"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"DimCoord(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
" 17, 18, 19, 20, 21, 22], dtype=int32), standard_name='realization', units=Unit('1'), var_name='realization')\n",
"DimCoord([2016-01-01 03:00:00, 2016-01-01 06:00:00, 2016-01-01 09:00:00,\n",
" 2016-01-01 12:00:00, 2016-01-01 15:00:00, 2016-01-01 18:00:00,\n",
" 2016-01-01 21:00:00, 2016-01-02 00:00:00, 2016-01-02 03:00:00,\n",
" 2016-01-02 06:00:00, 2016-01-02 09:00:00, 2016-01-02 12:00:00,\n",
" 2016-01-02 15:00:00, 2016-01-02 18:00:00, 2016-01-02 21:00:00,\n",
" 2016-01-03 00:00:00, 2016-01-03 03:00:00, 2016-01-03 06:00:00,\n",
" 2016-01-03 09:00:00, 2016-01-03 12:00:00, 2016-01-03 15:00:00,\n",
" 2016-01-03 18:00:00, 2016-01-03 21:00:00, 2016-01-04 00:00:00,\n",
" 2016-01-04 03:00:00, 2016-01-04 06:00:00, 2016-01-04 09:00:00,\n",
" 2016-01-04 12:00:00, 2016-01-04 15:00:00, 2016-01-04 18:00:00,\n",
" 2016-01-04 21:00:00, 2016-01-05 00:00:00, 2016-01-05 03:00:00,\n",
" 2016-01-05 06:00:00, 2016-01-05 09:00:00, 2016-01-05 12:00:00,\n",
" 2016-01-05 15:00:00, 2016-01-05 18:00:00, 2016-01-05 21:00:00,\n",
" 2016-01-06 00:00:00, 2016-01-06 03:00:00, 2016-01-06 06:00:00,\n",
" 2016-01-06 09:00:00, 2016-01-06 12:00:00, 2016-01-06 15:00:00,\n",
" 2016-01-06 18:00:00, 2016-01-06 21:00:00, 2016-01-07 00:00:00,\n",
" 2016-01-07 03:00:00, 2016-01-07 06:00:00, 2016-01-07 09:00:00,\n",
" 2016-01-07 12:00:00, 2016-01-07 15:00:00, 2016-01-07 18:00:00,\n",
" 2016-01-07 21:00:00, 2016-01-08 00:00:00, 2016-01-08 03:00:00,\n",
" 2016-01-08 06:00:00, 2016-01-08 09:00:00, 2016-01-08 12:00:00,\n",
" 2016-01-08 15:00:00, 2016-01-08 18:00:00, 2016-01-08 21:00:00,\n",
" 2016-01-09 00:00:00], standard_name='time', calendar='gregorian', var_name='time')\n"
]
}
],
"source": [
"r_coord = sample.coord('realization').copy(points=realizations)\n",
"print(r_coord)\n",
"\n",
"t_coord = sample.coord('time').copy(points=times)\n",
"print(t_coord)\n",
"\n",
"lat_coord = sample.coord('latitude')\n",
"\n",
"lon_coord = sample.coord('longitude')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"new_cube.add_dim_coord(r_coord, 0)\n",
"new_cube.add_dim_coord(t_coord, 1)\n",
"new_cube.add_dim_coord(lat_coord, 2)\n",
"new_cube.add_dim_coord(lon_coord, 3)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"for c in sample.aux_coords:\n",
" if c.standard_name != 'forecast_period': #fp just causes problems\n",
" new_cube.add_aux_coord(c)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)\n",
" Dimension coordinates:\n",
" realization x - - -\n",
" time - x - -\n",
" latitude - - x -\n",
" longitude - - - x\n",
" Scalar coordinates:\n",
" forecast_reference_time: 2016-01-01 00:00:00\n",
" height: 1.5 m\n",
" Attributes:\n",
" Conventions: CF-1.5\n",
" STASH: m01s03i250\n",
" source: Data from Met Office Unified Model\n",
" um_version: 10.1\n"
]
}
],
"source": [
"print(new_cube)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## all together"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class MegaCube(object):\n",
" def __init__(self, cubes):\n",
" self.cubes = iris.cube.CubeList([cube.copy() for cube in cubes])\n",
" [cube.remove_coord('forecast_period') for cube in self.cubes]\n",
" \n",
" @property\n",
" def dim_coords(self):\n",
" # assume all cubes have same dim coords\n",
" return [coord.name() for coord in self.cubes[0].dim_coords]\n",
" \n",
" @property\n",
" def shape(self):\n",
" return [len(self.points(coord)) for coord in self.dim_coords]\n",
" \n",
" def merge_cube(self):\n",
" return self.padded_cubes().merge_cube()\n",
" \n",
" def padded_cubes(self):\n",
" return iris.cube.CubeList([self.pad_cube(cube) for cube in self.cubes])\n",
" \n",
" def points(self, coord):\n",
" points = np.concatenate([c.coord(coord).points for c in self.cubes])\n",
" return np.unique(points)\n",
"\n",
" def pad_cube(self, cube):\n",
" new_cube = iris.cube.Cube(\n",
" data = self.pad_array(cube),\n",
" standard_name = cube.standard_name,\n",
" long_name = cube.long_name,\n",
" var_name = cube.var_name,\n",
" units = cube.units,\n",
" attributes = cube.attributes,\n",
" cell_methods = cube.cell_methods,\n",
" )\n",
" \n",
" for indx, coord in enumerate(cube.dim_coords):\n",
" new_cube.add_dim_coord(coord.copy(points=self.points(coord.name())), indx)\n",
" \n",
" for c in cube.aux_coords:\n",
" new_cube.add_aux_coord(c)\n",
"\n",
" print(new_cube)\n",
" \n",
" return new_cube\n",
" \n",
" def pad_array(self, cube):\n",
" slices = []\n",
" for dim_coord in self.dim_coords:\n",
" indexes = self.present_indexes(cube, dim_coord)\n",
" if dim_coord == 'realization': # use advanced slice\n",
" slices.append(np.s_[indexes])\n",
" else: # can only easily do one advanced slice, assume others are continuous\n",
" slices.append(np.s_[indexes[0]:indexes[-1] + 1])\n",
" new_array = np.ma.masked_all(self.shape)\n",
" new_array[slices] = cube.data\n",
" return new_array\n",
" \n",
" def present_indexes(self, cube, coord):\n",
" available = np.in1d(self.points(coord), cube.coord(coord).points)\n",
" return np.where(available == True)[0]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"mcube = MegaCube(cubes)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)\n",
" Dimension coordinates:\n",
" realization x - - -\n",
" time - x - -\n",
" latitude - - x -\n",
" longitude - - - x\n",
" Scalar coordinates:\n",
" forecast_reference_time: 2016-01-01 00:00:00\n",
" height: 1.5 m\n",
" Attributes:\n",
" Conventions: CF-1.5\n",
" STASH: m01s03i250\n",
" source: Data from Met Office Unified Model\n",
" um_version: 10.1\n",
"dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)\n",
" Dimension coordinates:\n",
" realization x - - -\n",
" time - x - -\n",
" latitude - - x -\n",
" longitude - - - x\n",
" Scalar coordinates:\n",
" forecast_reference_time: 2016-01-01 06:00:00\n",
" height: 1.5 m\n",
" Attributes:\n",
" Conventions: CF-1.5\n",
" STASH: m01s03i250\n",
" source: Data from Met Office Unified Model\n",
" um_version: 10.1\n",
"dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)\n",
" Dimension coordinates:\n",
" realization x - - -\n",
" time - x - -\n",
" latitude - - x -\n",
" longitude - - - x\n",
" Scalar coordinates:\n",
" forecast_reference_time: 2016-01-01 12:00:00\n",
" height: 1.5 m\n",
" Attributes:\n",
" Conventions: CF-1.5\n",
" STASH: m01s03i250\n",
" source: Data from Met Office Unified Model\n",
" um_version: 10.1\n",
"dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)\n",
" Dimension coordinates:\n",
" realization x - - -\n",
" time - x - -\n",
" latitude - - x -\n",
" longitude - - - x\n",
" Scalar coordinates:\n",
" forecast_reference_time: 2016-01-01 18:00:00\n",
" height: 1.5 m\n",
" Attributes:\n",
" Conventions: CF-1.5\n",
" STASH: m01s03i250\n",
" source: Data from Met Office Unified Model\n",
" um_version: 10.1\n"
]
},
{
"data": {
"text/plain": [
"[<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_cubes = mcube.padded_cubes()\n",
"new_cubes"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>,\n",
"<iris 'Cube' of dew_point_temperature / (K) (realization: 23; time: 64; latitude: 600; longitude: 800)>]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"new_cubes"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"result = new_cubes.merge()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0: dew_point_temperature / (K) (forecast_reference_time: 4; realization: 23; time: 64; latitude: 600; longitude: 800)\n"
]
}
],
"source": [
"print(result)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dew_point_temperature / (K) (forecast_reference_time: 4; realization: 23; time: 64; latitude: 600; longitude: 800)\n",
" Dimension coordinates:\n",
" forecast_reference_time x - - - -\n",
" realization - x - - -\n",
" time - - x - -\n",
" latitude - - - x -\n",
" longitude - - - - x\n",
" Scalar coordinates:\n",
" height: 1.5 m\n",
" Attributes:\n",
" Conventions: CF-1.5\n",
" STASH: m01s03i250\n",
" source: Data from Met Office Unified Model\n",
" um_version: 10.1\n"
]
}
],
"source": [
"cube = result[0]\n",
"print(cube)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## summary"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- works\n",
"- very slow, brings data into memory\n",
"- need to try with iris 2 + dask with masked arrays (not yet released)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment