GVKun编程网logo

当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?

2

这篇文章主要围绕当至少有一个特征值退化点时,为什么PythonNumPy/SciPy数值特征向量与MATLAB相比表现不正确?展开,旨在为您提供一份详细的参考资料。我们将全面介绍当至少有一个特征值退化

这篇文章主要围绕当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?展开,旨在为您提供一份详细的参考资料。我们将全面介绍当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?,同时也会为您带来C 或 C++ 中的 Matlab 或 Scipy Filtfilt零相位滤波器、centos install scipy 问题:File "scipy/linalg/setup.py", line 20, in configuration raise NotFoundE、Jupyter 中的 Numpy 在打印时出错(Python 版本 3.8.8):TypeError: 'numpy.ndarray' object is not callable、MATLAB 的 pwelch 和 Python 的 SciPy welch 之间的比例差异的实用方法。

本文目录一览:

当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?

当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?

如何解决当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?

对于物理问题,我用方阵(通常是复值,但通过构造保证具有实特征值)对特征值方程进行数值求解。我有一个 2D 参数空间 (x,y),在它上面我在每个点求解这个方程。 然后我取一个特征向量的点积和另一个特征向量沿 (x,y) 轨迹的离散化时间导数。例如,如果我的矩阵是 4 x 4,并且我得到具有特征值 A,B,C,D 的特征向量 a,b,c,d,我说的是 (A).(dB/dt)(通常是复数值)。然后我计算它的复杂参数/角度。

只要我的 (x,y) 点足够接近(即“连续”),并且只要我知道所考虑的每个特征函数的特征值在轨迹上的每个点上都是唯一的(即 {{1 }} 对于所有 a =/= b 制作轨迹),我可以预期这个角度也是一个连续的量,没有任何急剧的跳跃(如第一个图)。然而,当使用 Numpy/Scipy 时,这种“连续”质量似乎被退化/重复的特征值破坏了即使它不在轨迹上。也就是说,如果我的轨迹包含 (x,y),每个点都有唯一的特征值(即 {(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)}),看起来好像 a1 =/= b1,a2 =/= b2,... 处的 a9 = b9 会导致问题,即使 {{ 1}} 不在考虑的轨迹上。 我通过改变我的矩阵来推断出这一点,以便每个特征函数的特征值在每个点都是唯一的(即我强制 (x9,y9))。这样做给了我一个“连续”的角度。相反,这两种情况在 MATLAB 中都是“连续的”,正如理论上所预期的那样。

问题似乎与分配给数值特征函数的复杂相位有关。我使用 (x9,y9) 对此进行了更深入的研究(下图最后一个),但效果并不理想。 我花了数周时间试图了解原因,但无济于事。任何建议将不胜感激。

沿着轨迹的复杂参数的预期行为,没有任何重复的特征值(当特征值在任何地方都是唯一的时,Python 和 MATLAB 都显示了这一点):

enter image description here

使用 a9 =/= b9np.unwrap 时观察到的行为:

enter image description here

使用 numpy.linalg.eig AND scipy.linalg.eig 时观察到的行为 - 不应该有跳转:

enter image description here

C 或 C++ 中的 Matlab 或 Scipy Filtfilt零相位滤波器

C 或 C++ 中的 Matlab 或 Scipy Filtfilt零相位滤波器

如何解决C 或 C++ 中的 Matlab 或 Scipy Filtfilt零相位滤波器

我想实现一个快速简单的 filtfilt 函数来安装在我的嵌入式系统上。

我已经生成了系数 O 和 K。但滤波器函数返回的结果与 MatLab 函数不同。

我被这个问题困住了,你有什么想法吗?

变量

  1. double not_filtered_signal[10] = {9.96,9.96,9.959,9.958,9.957,9.956,9.954,9.953,9.952,9.952};
  2. double O[3] = {0.000241359,0.000482718,0.000241359};
  3. double K[3] = {1,-1.95558,0.956544};

C++ 代码

  1. std::vector<double> filter(double *x,double *coeff_b,double *coeff_a)
  2. {
  3. int len_x = x.size();
  4. int len_b = coeff_b.size();
  5. int len_a = coeff_a.size();
  6. std::vector<double> zi(len_b);
  7. std::vector<double> filter_x(len_x);
  8. if (len_a == 1)
  9. {
  10. for (int m = 0; m<len_x; m++)
  11. {
  12. filter_x[m] = coeff_b[0] * x[m] + zi[0];
  13. for (int i = 1; i<len_b; i++)
  14. {
  15. zi[i - 1] = coeff_b[i] * x[m] + zi[i];;
  16. }
  17. }
  18. }
  19. else
  20. {
  21. for (int m = 0; m<len_x; m++)
  22. {
  23. filter_x[m] = coeff_b[0] * x[m] + zi[0];
  24. for (int i = 1; i<len_b; i++)
  25. {
  26. zi[i - 1] = coeff_b[i] * x[m] + zi[i] - coeff_a[i] * filter_x[m];
  27. }
  28. }
  29. }
  30. std::cout << "filtered" << std::endl;
  31. for (int i = 0; i < 11; ++i) {
  32. std::cout << filter_x[i] << std::endl;
  33. }
  34. return filter_x;
  35. }
  36. int main(int argc,char **argv) {
  37. double not_filtered_signal[10] = {9.96,9.952};
  38. double O[3] = {0.000241359,0.000241359};
  39. double K[3] = {1,0.956544};
  40. filter(not_filtered_signal,O,K);
  41. }

MATLAB 代码

  1. output_matlab = filtfilt(o,k,not_filtered_signal)

结果

  1. [C++_OUTPUT] = [0.00240394,0.0119129,0.0306129,0.0580862,0.0939243,0.137728,0.189108,0.247685,0.313087,0.384953]
  2. [OUTPUT_FROM_MATLAB] = [9.96068972064697,9.96057742124022,9.96046542095148,9.96035381811049,9.96024270955799,9.96013218984091,9.96002235028521,9.95991327788561,9.95980505407268,9.95969775366202]

centos install scipy 问题:File

centos install scipy 问题:File "scipy/linalg/setup.py", line 20, in configuration raise NotFoundE

依赖包: pyparsing、dateutil、scipy、numpy、libpng 1.2 (or later)、`freetype` 1.4 (or later) 安装pyparsing: # pip install pyparsing 安装numpy: # pip install numpy 安装dateutil: # pip install python-dateutil 安装scipy: # pip install scipy 待测:sudo yum -y install gcc gcc-c++ numpy python-devel scipy(不过这些包都装好了) 报错: # pip install scipy Downloading/unpacking scipy Downloading scipy-0.17.1.tar.gz (12.4MB): 81kB downloaded Exception: Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/basecommand.py",line 139,in main status = self.run(options,args) File "/usr/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/commands/install.py",line 266,in run requirement_set.prepare_files(finder,force_root_egg_info=self.bundle,bundle=self.bundle) File "/usr/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/req.py",line 1033,in prepare_files self.unpack_url(url,location,self.is_download) File "/usr/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/req.py",line 1161,in unpack_url retval = unpack_http_url(link,self.download_cache,self.download_dir) File "/usr/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/download.py",line 554,in unpack_http_url download_hash = _download_url(resp,link,temp_location) File "/usr/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/download.py",line 458,in _download_url chunk = resp.read(4096) File "/usr/local/lib/python2.7/socket.py",line 380,in read data = self._sock.recv(left) File "/usr/local/lib/python2.7/httplib.py",line 567,in read s = self.fp.read(amt) File "/usr/local/lib/python2.7/socket.py",in read data = self._sock.recv(left) File "/usr/local/lib/python2.7/ssl.py",line 246,in recv return self.read(buflen) File "/usr/local/lib/python2.7/ssl.py",line 165,in read return self._sslobj.read(len) SSLError: The read operation timed out Storing complete log in /root/.pip/pip.log 解决方法: # pip --default-timeout=100 install django 重新安装scipy 各个安装包版本: nose-1.3.1 lapack-3.5.0 atlas-3.10.1 scipy-0.11.0 numpy-1.6.2 依赖关系:scipy的安装需要依赖于numpy、lapack、atlas(后两者都是线性代数工具包,不清楚的自行google),而numpy和sci的测试程序的运行又依赖于nose,因此,整个安装过程必须要按顺序执行的,否则是无法执行下去的。 安装nose: # pip install nose 安装lapack: #yum install lapack lapack-devel blas blas-devel 更新pip # pip install --upgrade pip 安装scipy: # pip install scipy 安装matplotlib: # pip install matplotlib 报错: 安装freetype: 依赖freetype-devel # yum install freetype-devel # yum install freetype 安装matplotlib: # cd matplotlib-1.5.1 # python setup.py install 测试: 参考:http://paperman825.blog.chinaunix.NET/uid-25691489-id-5602653.html

Jupyter 中的 Numpy 在打印时出错(Python 版本 3.8.8):TypeError: 'numpy.ndarray' object is not callable

Jupyter 中的 Numpy 在打印时出错(Python 版本 3.8.8):TypeError: 'numpy.ndarray' object is not callable

如何解决Jupyter 中的 Numpy 在打印时出错(Python 版本 3.8.8):TypeError: ''numpy.ndarray'' object is not callable?

晚安, 尝试打印以下内容时,我在 jupyter 中遇到了 numpy 问题,并且得到了一个 错误: 需要注意的是python版本是3.8.8。 我先用 spyder 测试它,它运行正确,它给了我预期的结果

使用 Spyder:

import numpy as np
    for i in range (5):
        n = np.random.rand ()
    print (n)
Results
0.6604903457995978
0.8236300859753154
0.16067650689842816
0.6967868357083673
0.4231597934445466

现在有了 jupyter

import numpy as np
    for i in range (5):
        n = np.random.rand ()
    print (n)
-------------------------------------------------- ------
TypeError Traceback (most recent call last)
<ipython-input-78-0c6a801b3ea9> in <module>
       2 for i in range (5):
       3 n = np.random.rand ()
---->  4 print (n)

       TypeError: ''numpy.ndarray'' object is not callable

感谢您对我如何在 Jupyter 中解决此问题的帮助。

非常感谢您抽出宝贵时间。

阿特,约翰”

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

MATLAB 的 pwelch 和 Python 的 SciPy welch 之间的比例差异

MATLAB 的 pwelch 和 Python 的 SciPy welch 之间的比例差异

如何解决MATLAB 的 pwelch 和 Python 的 SciPy welch 之间的比例差异

我在使用名为 welch (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.welch.html) 的 scipy.signal 方法使用 python 时遇到问题,该方法估计时间信号的频谱,因为它没有(完全)提供与 MATLAB 称为 pwelch (https://www.mathworks.com/help/signal/ref/pwelch.html) 的方法相同的输出,给定相同的参数(窗口类型(汉明)、窗口大小、重叠等)。下面是我的每种语言的代码(输入是真实信号):

MATLAB:

  1. pxx_matlab = pwelch(w_in,4096,0.5*4096,4096)

(根据文档,MATLAB 的 pwelch 中的默认窗口是 hamming)

蟒蛇:

  1. from scipy import signal
  2. f,pxx = signal.welch(w_in,fs=16000,window=''hamming'',nperseg=4096,noverlap=2048,nfft=4096,detrend=False)

这是输入数据:

  1. np.random.seed(0)
  2. w_in = np.random.randn(16000*10)

(我不知道如何附加 CSV 文件)

结果如下:

enter image description here

如您所见,两个信号的不同之处在于缩放常数(几乎是一个常数),约为 34 dB (2544)。我试图将常数与采样频率 fs = 16000、奈奎斯特频率 (8 kHz) 或窗口长度 4096、重叠 2048 和它们的 10*np.log10 dB 对应项但没有有用。

你知道为什么会有一个恒定的比例差异吗?这个常数等于多少(作为参数的函数)?

编辑:常数 34 dB 似乎与使用的数据无关,因此它很可能是信号处理参数(fs、窗口长度、重叠等)的函数。

关于当至少有一个特征值退化点时,为什么 Python NumPy/SciPy 数值特征向量与 MATLAB 相比表现不正确?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于C 或 C++ 中的 Matlab 或 Scipy Filtfilt零相位滤波器、centos install scipy 问题:File "scipy/linalg/setup.py", line 20, in configuration raise NotFoundE、Jupyter 中的 Numpy 在打印时出错(Python 版本 3.8.8):TypeError: 'numpy.ndarray' object is not callable、MATLAB 的 pwelch 和 Python 的 SciPy welch 之间的比例差异等相关知识的信息别忘了在本站进行查找喔。

本文标签: