这是我能够运行的MATLAB代码的一部分(不包括其他非重要变量)。在上下文中,完整的MATLAB程序模拟来自原子力显微镜的频带激励响应(与代码错误无关)
IO_rate = 4E6; %[samples/sec]
w1 = 200E3; % lower edge of band
w2 = 400E3; % upper edge of band
N_pixels = 128; % number of pixels along a line scan
N_points_per_pixel = 2^13; % number of data points per pixel
w_vec = -IO_rate/2: IO_rate/N_points_per_pixel : IO_rate/2-IO_rate/N_points_per_pixel; %frequency vector over a pixel
% build drive signal, define in the Fourier domain
D_vec = zeros(size(w_vec));
D_vec( ((abs(w_vec)<w2) + (abs(w_vec)>w1)) == 2 ) = 1; % drive bins located within upper and lower band edges
band_ind = find( (((w_vec)<w2) + ((w_vec)>w1)) == 2 );
现在我正在将代码转换为Python。这就是我目前所拥有的
IO_rate = 4E6; #[samples/sec]
w1 = 200E3; # lower edge of band
w2 = 400E3; # upper edge of band
N_pixels = 128; # number of pixels along a line scan
N_points_per_pixel = 2^13; # number of data points per pixel
w_vec = np.arange(-IO_rate/2, IO_rate/2-IO_rate/N_points_per_pixel, IO_rate/N_points_per_pixel)
D_vec = np.zeros(np.size(w_vec))
但是,现在我完全不知道如何将D_vec( ((abs(w_vec)<w2) + (abs(w_vec)>w1)) == 2 ) = 1;
行转换为Python。这不是我的MATLAB代码,但它看起来像是试图给函数调用赋值,我不知道为什么,也不知道这行实际做了什么。有人知道我如何将这行代码转换成Python吗
创建新数组的Numpy习惯用法是^{} ,该数组的形状与第一个数组匹配,其值取决于对第一个数组值的逻辑测试
正如我在{a3}中所说的{a2}
MATLAB中的语句
tmp = ((abs(w_vec)<w2) + (abs(w_vec)>w1)) == 2
返回一个逻辑(真/假)数组,其中tmp[i]
为真,如果w_vec[i] < w2
和w_vec[i] > w1
。Matlab隐式地将真/假值转换为0或1,因此检查和是否等于2等同于检查两个子条件是否都满足一旦我们有了这个数组,我们就可以使用它将
Dvec
中的相应条目设置为1请注意}相当于Python中的
^
是Python中的XOR运算符,而不是power运算符^MATLAB中的{a**b
或pow(a,b)
以下是我的转换:
相关问题 更多 >
编程相关推荐