{ "cells": [ { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:08:48.249166Z", "start_time": "2023-03-07T14:08:48.246325Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import gym\n", "import matplotlib.pyplot as plt\n", "from matplotlib import animation\n", "import random" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:03:53.352738Z", "start_time": "2023-03-07T14:03:53.345794Z" } }, "outputs": [ { "data": { "text/plain": [ "'0.15.4'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gym.version.VERSION" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2023-03-05T14:51:34.744085Z", "start_time": "2023-03-05T14:51:31.888070Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Looking in indexes: http://mirrors.aliyun.com/pypi/simple/\r\n", "Requirement already satisfied: JSAnimation in /Users/chunhuizhang/anaconda3/envs/py3/lib/python3.7/site-packages (0.1)\r\n" ] } ], "source": [ "!pip install JSAnimation" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:04:07.798088Z", "start_time": "2023-03-07T14:04:07.791365Z" } }, "outputs": [], "source": [ "from JSAnimation.IPython_display import display_animation\n", "from IPython.display import display, HTML" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 重新认识 cartpole 环境" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 小滑块/倒立摆\n", "- 典型的 mdp(markov decision process)\n", " - 下一时刻的状态(转移)$s_{t+1}$ 只跟当前状态 $s_t$ 和(当前状态下采取的)$a_t$ 有关\n", "- action space is discrete and finite\n", "- state(observation)space is continuous" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:04:12.875444Z", "start_time": "2023-03-07T14:04:12.854714Z" } }, "outputs": [], "source": [ "env = gym.make('CartPole-v0')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### state/space" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:04:15.382240Z", "start_time": "2023-03-07T14:04:15.377243Z" } }, "outputs": [ { "data": { "text/plain": [ "array([-3.40156280e-02, -4.64929535e-05, -2.24331342e-02, -3.44344543e-02])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# init space\n", "env.reset()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:04:25.359650Z", "start_time": "2023-03-07T14:04:25.356727Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Discrete(2)\n" ] } ], "source": [ "# action space\n", "print(env.action_space)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:04:30.487576Z", "start_time": "2023-03-07T14:04:30.484735Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2\n" ] } ], "source": [ "print(env.action_space.n)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:04:51.524995Z", "start_time": "2023-03-07T14:04:51.520685Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Box(4,)\n", "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n", "[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n", "4\n" ] } ], "source": [ "# observation space\n", "# https://www.gymlibrary.dev/environments/classic_control/cart_pole/\n", "print(env.observation_space)\n", "print(env.observation_space.low)\n", "print(env.observation_space.high)\n", "print(env.observation_space.shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### one episode" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2023-03-05T14:57:32.225046Z", "start_time": "2023-03-05T14:57:31.832564Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "step: 1, state: [-0.02012693 0.20925067 0.03958993 -0.29435305]\n", "step: 2, state: [-0.01594191 0.40378649 0.03370287 -0.57429172]\n", "step: 3, state: [-0.00786618 0.20820864 0.02221704 -0.27118479]\n", "step: 4, state: [-0.00370201 0.01277682 0.01679334 0.02842187]\n", "step: 5, state: [-0.00344647 -0.18258188 0.01736178 0.32635562]\n", "step: 6, state: [-0.00709811 0.01228863 0.02388889 0.03919801]\n", "step: 7, state: [-0.00685234 -0.18316759 0.02467285 0.33932136]\n", "step: 8, state: [-0.01051569 -0.37863177 0.03145928 0.63968147]\n", "step: 9, state: [-0.01808833 -0.18396223 0.04425291 0.35706915]\n", "step: 10, state: [-0.02176757 -0.37968447 0.05139429 0.66337121]\n", "step: 11, state: [-0.02936126 -0.18531377 0.06466172 0.38730339]\n", "step: 12, state: [-0.03306753 0.00883356 0.07240779 0.1156883 ]\n", "step: 13, state: [-0.03289086 -0.18724716 0.07472155 0.43030799]\n", "step: 14, state: [-0.03663581 0.00674154 0.08332771 0.16208459]\n", "step: 15, state: [-0.03650098 -0.18946834 0.0865694 0.47984822]\n", "step: 16, state: [-0.04029034 -0.38569887 0.09616637 0.79851137]\n", "step: 17, state: [-0.04800432 -0.19201853 0.11213659 0.53756254]\n", "step: 18, state: [-0.05184469 0.00136303 0.12288785 0.28221117]\n", "step: 19, state: [-0.05181743 0.19453743 0.12853207 0.0306729 ]\n", "step: 20, state: [-0.04792668 0.38760429 0.12914553 -0.21885405]\n", "step: 21, state: [-0.0401746 0.19089548 0.12476845 0.1116153 ]\n", "step: 22, state: [-0.03635669 -0.00577295 0.12700075 0.44091157]\n", "step: 23, state: [-0.03647215 -0.20244188 0.13581898 0.770777 ]\n", "step: 24, state: [-0.04052098 -0.00942435 0.15123452 0.52372515]\n", "step: 25, state: [-0.04070947 -0.20631499 0.16170903 0.85998375]\n", "step: 26, state: [-0.04483577 -0.0137211 0.1789087 0.62219743]\n", "step: 27, state: [-0.04511019 0.17851121 0.19135265 0.39077045]\n", "step: 28, state: [-0.04153997 -0.01873813 0.19916806 0.73715912]\n", "step: 29, state: [-0.04191473 0.17315764 0.21391124 0.51317475]\n" ] } ], "source": [ "env = gym.make('CartPole-v0')\n", "# observation = env.reset()\n", "state = env.reset()\n", "steps = 0\n", "frames = []\n", "while True:\n", " frames.append(env.render(mode='rgb_array'))\n", " action = env.action_space.sample()\n", " state, reward, done, info = env.step(action)\n", " steps += 1\n", " print(f'step: {steps}, state: {state}')\n", " if done:\n", " break" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2023-03-05T14:58:23.485976Z", "start_time": "2023-03-05T14:58:23.446404Z" } }, "outputs": [ { "data": { "text/plain": [ "[array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8),\n", " array([[[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " ...,\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]],\n", " \n", " [[255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " ...,\n", " [255, 255, 255],\n", " [255, 255, 255],\n", " [255, 255, 255]]], dtype=uint8)]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "frames" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2023-03-07T14:05:15.008732Z", "start_time": "2023-03-07T14:05:15.003533Z" } }, "outputs": [], "source": [ "def display_frames_as_gif(frames, output):\n", " \"\"\"\n", " Displays a list of frames as a gif, with controls\n", " 以gif格式显示关键帧列,带有控件\n", " \"\"\"\n", " \n", " fig = plt.figure(figsize=(frames[0].shape[1]/72.0, frames[0].shape[0]/72.0),dpi=72)\n", " patch = plt.imshow(frames[0])\n", " plt.axis('off')\n", " \n", " def animate(i):\n", " img = patch.set_data(frames[i])\n", " return img ## *** return是必须要有的 ***\n", " \n", " anim = animation.FuncAnimation(plt.gcf(), animate, frames=len(frames), interval=50)\n", " \n", " anim.save(output)\n", " return HTML(anim.to_jshtml()) ## *** 返回一个HTML对象,以便被调用者显示。 ***\n", " # display(display_animation(anim, default_mode='loop'))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2023-03-05T14:59:09.169623Z", "start_time": "2023-03-05T14:58:48.224146Z" }, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "