1.python脚本环境下载
https://www.python.org/downloads/release/python-3114/https://www.python.org/downloads/release/python-3114/安装时记得把可执行路径添加进系统path,这样你可以随时调用python环境。
1.1 国内镜像
国内使用阿里云镜像下载速度会快得多:
直接搜索python就能找到:
python-release-windows安装包下载_开源镜像站-阿里云
1.2 python版本问题
注意,Python如果安装在 windows环境,现在的大部分主流笔记本上的应该安装的是:amd64版本,就是下图中最上方的那个。带有a的版本,似乎仍在测试状态,标记了a,b测试。
不带后缀的是x86版本。pip安装扩展模块过程,系统会自动软件包以来的平台类型,一旦选错,可能会出现错误。
2.扩展模块的安装
step1.找到python安装位置,推荐安装everything.然会直接找python这个目录,它一般的位置在:
step2.打开cmd.exe,切换至这个目录, 执行:
python -m pip install matplotlib --timeout 200 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
上面:
- pip install <module_name>是基础的命令字。
- timeout参数指定超时时间,单位秒。
- -i 制定镜像站,国外的源访问速度非常慢。
- --trusted-host是在指定信任这个私有源
一旦脚本执行时提示:
ModuleNotFoundError: No module named 'matplotlib'
就重复上述安装过程。
2.1 把安装源指向国内镜像:
输入下面的命令,可以避免每次都输入--trusted-host -i参数
pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple
pip3 config set install.trusted-host mirrors.aliyun.com
pip3 install --upgrade pip
2.2 安装三方库时的报错及处置
2.2.1 vswhere 丢失
新的设备上安装完python后,执行pip install安装三方库的时候,经常会出现编译问题;有些组建的编译不可以任意指定,似乎硬绑定到了vs的编译工具。这个时候,如果你仅仅使用vs code来作为编译调试工具,即使安装了类似gcc编译工具mingw,也会遇到缺乏编译工具的问题,典型的错误:
Could not find C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe
这个vswhere.exe看到路径信息就知道,是vs building tools 的一部分。
在这之前,某些组件的pip install过程会非常长时间的停留在:
Preparing metadata (pyproject.toml)
阶段。 最终会报告编译失败。这个时候,你有两个选择, 一个是安装全套vistual studio,另一个选择,就是仅仅安装它的编译工具:
2.2.2 报x86 x86_64依赖不匹配
Need python for x86_64, but found x86
Run-time dependency python found: NO (tried sysconfig)
请参见1.2节,有关python的release发行包的版本问题。
3.脚本编写和执行
只要学过一门计算机语言,就可以在ChatGPT的帮助下,熟悉程序结构和语法。
脚本代码存储为.py后缀,就可以直接点击执行。
如果需要排错,进相应的目录内,执行命令行即可。
在python脚本执行环境内直接执行 python命令,可以这样:
D:\>python
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 13.0
>>> b = 1/a
>>> print(b)
0.07692307692307693
它起码可以替代计算器。 现在,可能是windows平台上最好用的脚本执行环境。甚至数学部分,可以部分替代matlab.
附录A 一段工作上正在使用的示例代码
我在之前仅仅了解非常有限的python语法,可能只学过不到50小时。在AI的助力下,你能比用搜索器更快地解决问题:
# show how to use FFT, filtered DC signal and return to SampleValue-time type.
# the basic concept is coming from ChatGPT.
# Write in python language.
#
# created by twicave.
# Jun09,2023
#
import numpy as np
import matplotlib.pyplot as plt
# 定义正弦信号
# 产生一个包含1000Hz、2000Hz两个正弦波信号和一个直流分量的复合信号
Fs = 20000;
f1 = 1000;
f2 = 2000;
t = np.arange(0, 0.01, 1/Fs);
signal = np.sin(2*np.pi*f1*t) + 0.7*np.sin(2*np.pi*f2*t) + 800;
fig = plt.figure(1, figsize=(8, 10));
plt1 = fig.add_subplot(2, 1, 1)
plt1.plot(t,signal)
plt1.set_xlabel('Time (s)')
plt1.set_ylabel('Amplitude')
plt1.set_title('Original Signal')
# 下面,将对应信号转至频域消除0点后转回时域
x = signal
# 傅里叶变换
X = np.fft.fft(x) # 计算原始信号的傅里叶变换
# 去除直流分量
X[0] = 0;
# 幅角变换
phase_shift = np.zeros(len(X))
phase_shift[len(X)//2] = -np.angle(X[len(X)//2])
X_corrected = X * np.exp(1j * phase_shift)
# 转回时域
x_withoutDC = np.real(np.fft.ifft(X_corrected));
print(x_withoutDC);
s_corrected = x_withoutDC;
plt2 = fig.add_subplot(2, 1, 2)
plt2.plot(t, s_corrected.real)
plt2.set_xlabel('Time (s)')
plt2.set_ylabel('Amplitude')
plt2.set_title('After filtered the DC of signal')
fig.suptitle("Demo program : filter DC of signal");
fig.show()
附录B Python语法及模块手册
Python的函数说明是按照版本分别放置的,下面的代码可以查询自己的python版本
#查询python版本:
import sys
print(sys.version)
这里是我在用的版本的某个函数的在线帮助系统链接:
很奇怪。python的核心网站上,没有重要的模块,比如numpy的信息,干干静静的,连一个链接都没有。然后这个模块有自己独立的网站和帮助系统:
NumPy user guide — NumPy v1.24 Manual
附录C 最常用的语法功能
#单行注释
#这是一个单行注释
#多行注释
“”“
三个引号开启一组多行注释
这仍然是注释。
“”“
#文件编码
#默认编码是utf8,
#如果你的.py文件无法执行。请另存为.uft8格式。notepad就能干这件事。
#引用模块
import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt
#最常用的一窗体多图语法
import matplotlib.pyplot as plt
fig, (ax1, ax2, ax3, ax4) = plt.subplots(4, 1, sharex=False, figsize=(6, 9))
ax1.plot(t, sig)
ax1.set_ylabel('Original Signal')
ax2.plot(np.arange(0, N/2)*fs/N, 20*np.log10(np.abs(np.fft.fft(h)[:N//2])))
ax2.set_ylabel('Filter Frequency Response (dB)')
ax3.plot(t, sig_filtered)
ax3.set_ylabel('Filtered Signal')
ax3.set_xlabel('Time (s)')
ax4.plot(t, t);
ax4.set_xlabel('pt = ' + str(len(t)));
plt.show()
#打印任意对象
print(A)
附录D 有价值链接
Python官方客户支持网站
一个跳板,A Guy talking about 语法检查
Python3.x官方在线帮助
使用VS2022免费社区版编写编译调试python:
管理 Python 环境和解释器
https://learn.microsoft.com/zh-cn/visualstudio/python/managing-python-environments-in-visual-studio?view=vs-2022 Microsoft Learning, VS 文档
https://learn.microsoft.com/en-us/visualstudio/windows/?view=vs-2022&preserve-view=trueVisual Studio - Microsoft Q&A
https://learn.microsoft.com/en-us/answers/tags/176/vs