【发布时间】:2015-08-16 10:59:15
【问题描述】:
我已经将一个 Matlab 函数用于创建一个过完备离散余弦变换矩阵来表示这种矢量空间中的一维信号,并使用 Python 语言。
Matlab 函数
function D = odctdict(n,L)
%ODCTDICT Overcomplete DCT dictionary.
% D = ODCTDICT(N,L) returns the overcomplete DCT dictionary of size NxL
% for signals of length N.
%
% See also ODCT2DICT, ODCT3DICT, ODCTNDICT.
D = zeros(n,L);
D(:,1) = 1/sqrt(n);
for k = 2:L
v = cos((0:n-1)*pi*(k-1)/L)';
v = v-mean(v);
D(:,k) = v/norm(v);
end
Python 翻译函数
import numpy as np
def odct1dict(n, l):
"""
1-D Overcomplete DCT dictionary.
D = odct1dict(N, L) returns the overcomplete DCT dictionary of size NxL
for signals of length N.
:param n: signal size
:type n: int
:param l: number of atoms
:type l: int
:return: 1-D Overcomplete DCT dictionary NumPy array
"""
d = np.zeros((n, l))
d[:, 0] = 1 / np.sqrt(n)
for k in range(1, l):
v = np.transpose(np.cos(np.arange(0, n) * np.pi * k * l))
v = v - np.mean(v)
d[:, k] = v / np.linalg.norm(v)
return d
我正在使用 PyCharm 作为 Python IDE,并且该软件在 for 循环内的指令 v = np.transpose(np.cos(np.arange(0, n) * np.pi * k * l)) 中引发了一个我不明白的警告,特别是针对 np.transpose 函数的参数 @987654325 @。
预期类型 'Union[ndarray, Iterable]',得到 'int' 而不是更少...
此检查检测函数调用表达式中的类型错误。到期的 对于动态调度和鸭子类型,这在有限但 有用的案例数。可以指定函数参数的类型 在文档字符串或 Python 3 函数注释中。
你能为我解释一下这个警告吗?以及如何纠正?编写此类指令的正确方法是什么?
【问题讨论】:
-
您能否将该表达式扩展为多个步骤,以便查看哪一个失败?
标签: python numpy pycharm warnings translate