1.背景
最近調研python opencv, cuda加速矩陣/向量運算, 對于矩陣的線性變換, 秩, 轉秩, 行列式變化等概概念模糊不清.
大概課本依舊是天書, 于是上B站搜索線性代數, 看到 3Blue1Brown 線性變換本質 視頻, 點擊觀看.
驚為天人 --> 豁然開朗 --> 突然頓悟 --> 開心不已
感覺大學的線性代數課本, 是真的差.
3Blue1Brown 線性變換本質 視頻動畫可視化
二維向量,
三維向量,
二維向量: 縮放,位移
–>引出矩陣乘法的幾何意義
–> 引出矩陣乘法 為什么是 行x列, 行 = 列, 代數計算的規定
—> 引出線性變化, 行列式變化
----> 引出逆矩陣
-----> 引出基座標變化
點積 可視化映射, 計算 --> 引出 點積作用, 求兩個向量夾角
…
通過視頻, 動畫演示 二維, 三維向量變化 引出代數公式.
而大學課本, 只定義和說明矩陣和線性代數公式的計算, 沒有介紹原有, 用途;
故學完就忘, 根本記不住
[ 3 0 0 2 ] X [ 1 1 ] 矩陣乘法幾何意義 , 縮放 \begin{bmatrix} 3 & 0 \\ 0 & 2 \end{bmatrix} X \begin{bmatrix} 1 \\ 1 \end{bmatrix} 矩陣乘法幾何意義, 縮放 [30?02?]X[11?]矩陣乘法幾何意義,縮放
[ 1 1 0 1 ] X [ 1 1 ] 矩陣乘法幾何意義 , 位移 \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} X \begin{bmatrix} 1 \\ 1 \end{bmatrix} 矩陣乘法幾何意義, 位移 [10?11?]X[11?]矩陣乘法幾何意義,位移
自己也有一些 微積分,線性變化計算的想法, 也想動畫可視化這些計算過程.
于是嘗試安裝運行python manimgl
版本說明: manim數學動畫制作有3個版本
- manim: 原作者版本
- manimgl : 通過opengl即時繪制動畫, 可以通過ipython交互, 輸入命令, 即時顯示效果 --> 現場教學推薦
- manimCE: 社區維護版, 原作者主要做數學視頻, 沒時間管理github pr請求, 由社區維護 --> 推薦版本
2.問題
測試環境1:
- 系統: wsl ubuntu24.04
- python 版本: 3.12
測試環境2:
- 系統: wsl ubuntu22.04
- python 版本: 3.10
安裝依賴
# 依賴庫
sudo apt install -y libcairo2-dev libpango1.0-dev libpangocairo-1.0-0 libgdk-pixbuf2.0-dev libffi-dev libssl-dev
sudo apt install -y libxml2-dev libxslt1-dev libjpeg-dev libfreetype6-dev libsdl2-dev libopenjp2-7-dev zlib1g-dev tesseract-ocr
sudo apt install -y libtesseract-dev libwebp-dev ffmpeg texlivesudo apt install -y texlive-full
# Note: texlive-full 安裝需要極長時間, 請耐心等待
venv創建獨立環境, 安裝manimgl
# 更新pip
pip install --upgrade pip# 1.創建虛擬環境
python3 -m venv manimgl# 2.加載環境
source manimgl/bin/activate# 3.安裝manimgl
pip3 install manimgl
運行manimgl錯誤: manimgl
Traceback (most recent call last):File "/home/liuj/venv/manimgl/bin/manimgl", line 5, in <module>from manimlib.__main__ import mainFile "/home/liuj/venv/manimgl/lib/python3.12/site-packages/manimlib/__main__.py", line 4, in <module>from manimlib import __version__
ImportError: cannot import name '__version__' from 'manimlib' (/home/liuj/venv/manimgl/lib/python3.12/site-packages/manimlib/__init__.py)
提示說明, python3.12 與 manimgl版本不一致
3.解決過程
方法1: 嘗試安裝低版本manimgl --> Fail
查詢manimgl版本
pip index versions manimgl
manimgl (1.7.2)
Available versions: 1.7.2, 1.7.1, 1.7.0, 1.6.1, 1.6.0, 1.5.0, 1.4.1, 1.4.0, 1.3.0, 1.2.0, 1.1.0, 1.0.0
安裝低版本 1.6.1
mkdir ~/venv; cd ~/venv# 1.創建虛擬環境
python3 -m venv manimgl_v1.6# 2.加載環境
source manimgl_v1.6/bin/activate# 3.安裝低版本 manimgl
pip3 install manimgl==1.6.1
運行錯誤1: ModuleNotFoundError
manimgl
Traceback (most recent call last):File "/home/liuj/venv/manimgl_v1.6/bin/manimgl", line 5, in <module>from manimlib.__main__ import mainFile "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/__init__.py", line 1, in <module>import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'
解決方法:
pip install --upgrade setuptools
再次運行 manimgl
成功
運行錯誤2:
gitee在線代碼: 2_square_to_circle_方形變圓形.py
運行實例: manimgl 2_square_to_circle_方形變圓形.py SquareToCircle
ManimGL v1.6.1
[16:29:44] INFO Using the default configuration file, which you can modify in config.py:265`/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/default_config.yml` INFO If you want to create a local configuration file, you can create a file named `custom_config.yml`, or run `manimgl --config` config.py:266
Traceback (most recent call last):File "/home/liuj/venv/manimgl_v1.6/bin/manimgl", line 8, in <module>sys.exit(main())^^^^^^File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/__main__.py", line 25, in mainscene.run()File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/scene/scene.py", line 91, in runself.construct()File "/home/liuj/3_work/4_python-example/7_數學_科學_計算/2_manim_manimgl數學動畫/manimgl/2_square_to_circle_方形變圓形.py", line 4, in constructcircle = Circle()^^^^^^^^File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/geometry.py", line 324, in __init__Arc.__init__(self, 0, TAU, **kwargs)File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/geometry.py", line 218, in __init__VMobject.__init__(self, **kwargs)File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/types/vectorized_mobject.py", line 85, in __init__super().__init__(**kwargs)File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/mobject.py", line 89, in __init__self.init_points()File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/geometry.py", line 221, in init_pointsself.set_points(Arc.create_quadratic_bezier_points(File "/home/liuj/venv/manimgl_v1.6/lib/python3.12/site-packages/manimlib/mobject/types/vectorized_mobject.py", line 968, in wrapperif not np.all(self.get_points() == old_points):^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: operands could not be broadcast together with shapes (24,3) (0,3)
錯誤原因:
numpy 的版本不匹配, 即numpy的版本太高, API不兼容
嘗試降低numpy版本, 引入其它問題 --> 尋找其它解決方法
嘗試安裝manimgl 1.5.0 版本, 遇到相同問題–> 尋找其它解決方法
方法2: 嘗試官網Anaconda安裝方法 --> Fail
1.安裝Anaconda3
中文博客安裝教程: https://blog.csdn.net/qq_29225913/article/details/105347317
清華源下載: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
下載: Anaconda3-5.3.1-Linux-x86_64.sh
安裝:
bash Anaconda3-5.3.1-Linux-x86_64.sh
# 按提示輸入 yes, Enter
# Note: vsocde 插件不要安裝, 下載速度很慢
安裝確認:
新開終端: conda -V
conda 4.5.11 --> 安裝conda成功
2.conda安裝manimgl教程
官網教程: https://3b1b.github.io/manim/getting_started/installation.html
git clone https://github.com/3b1b/manim.git
cd manim
conda create -n manim python=3.8
conda activate manim
pip install -e .
pip install -e .
安裝時提示錯誤
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Obtaining file:///home/liuj/venv/manimInstalling build dependencies ... doneChecking if build backend supports build_editable ... doneGetting requirements to build editable ... donePreparing editable metadata (pyproject.toml) ... done
Collecting addict (from manimgl==1.7.2)Using cached https://mirrors.ustc.edu.cn/pypi/packages/6a/00/b08f23b7d7e1e14ce01419a467b583edbb93c6cdb8654e54a9cc579cd61f/addict-2.4.0-py3-none-any.whl (3.8 kB)
Collecting appdirs (from manimgl==1.7.2)Using cached https://mirrors.ustc.edu.cn/pypi/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
INFO: pip is looking at multiple versions of manimgl to determine which version is compatible with other requirements. This could take a while.
ERROR: Ignored the following versions that require a different python version: 0.1.0 Requires-Python >=3.13; 0.2.0 Requires-Python >=3.13; 0.2.1 Requires-Python >=3.13
ERROR: Could not find a version that satisfies the requirement audioop-lts (from manimgl) (from versions: none)
ERROR: No matching distribution found for audioop-lts
錯誤原因:
audioop-lts; python_version>=‘3.13’ --> audioop-lts 依賴python版本3.13
與conda python=3.8沖突, 估計是原作者, 沒有指定audioop-lts版本 --> 放棄conda方法
方法3: 降低python版本, 兼容manimgl --> OK
通過錯誤提示
- conda安裝可知, manimgl 應該是在python=3.8版本驗證通過
- python3.12 版本安裝失敗可知, 需要降低python版本
故嘗試降低python版本, 這里使用pyenv降低版本.
1.安裝pyenv
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
按安裝提示添加環境配置: ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
eval "$(pyenv virtualenv-init -)"
2.pyenv安裝python=3.8版本環境
查看pyenv支持版本: pyenv install list
3.8.1
3.8.2
3.8.3
3.8.19
3.8.20
3.9.0
3.9.2
安裝 3.8.20: pyenv install 3.8.20
Downloading Python-3.8.20.tar.xz…
-> https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tar.xz
如果下載速度慢, 可以使用迅雷, 或開啟VPN下載 Python-3.8.20.tar.xz, 拷貝到~/.pyenv/cache
mkdir -p ~/.pyenv/cache
cp -r Python-3.8.20.tar.xz ~/.pyenv/cache
pyenv install 3.8.20
# 等待安裝成功
查看python3.8版本是否安裝成功
pyenv versions
- system (set by /home/liuj/.pyenv/version)
3.8.20
3.pyenv切換版本, 再次安裝manimgl
切換: pyenv shell 3.8.20
確認: pyenv versions
system
* 3.8.20 (set by PYENV_VERSION environment variable)
python3 -V
Python 3.8.20
創建虛擬環境, 并安裝manimgl
mkdir ~/venv; cd ~/venv# 1.創建虛擬環境
python3 -m venv manimgl_3.8# 2.加載環境
source manimgl_3.8/bin/activate# 3.安裝manimgl
pip3 install manimgl
運行: manimgl
ubuntu22.04成功
ubuntu24.04失敗
匯總
使用兩臺電腦驗證, 測試驗證
- 降低manimgl版本
- conda安裝
都遇到相同的問題.
最后只能在wsl ubuntu22.04 + python3.8 成功運行
4.總結
- 熟悉了python 版本管理: pyenv, conda
- 熟悉了python 環境管理: venv, virtualen
- manimgl版本是原作者更新, 測試不齊全, 建議使用manimCE 社區維護版制作動畫視頻
- windows未測試
- 動手能力強的, 強烈推薦使用manimgl即時演繹 + 交互, 可以用于實時演示