From dc228d75307ef269cfc37752d2ee4e35a4cab803 Mon Sep 17 00:00:00 2001 From: yutsuo Date: Sat, 1 Jun 2019 10:16:24 -0300 Subject: [PATCH] update --- Arrays.ipynb | 94 ++++ Cartopy-New.ipynb | 1045 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 1081 insertions(+), 58 deletions(-) diff --git a/Arrays.ipynb b/Arrays.ipynb index 1333cea..064fc0d 100644 --- a/Arrays.ipynb +++ b/Arrays.ipynb @@ -180,6 +180,100 @@ "clevs" ] }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "A = np.ones((5,5))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.],\n", + " [1., 1., 1., 1., 1.]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "A[1:4,1:4] = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 1., 1., 1., 1.],\n", + " [1., 0., 0., 0., 1.],\n", + " [1., 0., 0., 0., 1.],\n", + " [1., 0., 0., 0., 1.],\n", + " [1., 1., 1., 1., 1.]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.725 0.99 1. 0.87 ]\n", + "[0.725 0.99 1. 0.87 ]\n", + "[0.725 0.99 1. 0.87 ]\n" + ] + } + ], + "source": [ + "sampleArr = np.array([0.725, 0.39, 0.99, 1, 0.4, 0.223, 0.87])\n", + "\n", + "condition = (sampleArr > 0.5)\n", + "extracted = np.extract(condition, sampleArr) # returns [0.725 0.99]\n", + "\n", + "print(sampleArr[sampleArr > 0.5])\n", + "print(sampleArr[condition])\n", + "print(extracted)" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/Cartopy-New.ipynb b/Cartopy-New.ipynb index 9745bf8..4378525 100644 --- a/Cartopy-New.ipynb +++ b/Cartopy-New.ipynb @@ -9,14 +9,794 @@ "outputs": [ { "data": { - "image/png": "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\n", + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('