使用Numpy将MATLAB切片转换为Python

时间:2015-11-09 15:07:18

标签: python arrays matlab numpy scipy

我无法将一些MATLAB代码转换为python。我试图通过将基本信号的移位副本添加到更长的信号中来构建信号。在MATLAB中工作的代码是

function [time, signal] = generateRandomSignal(pulse,data,samples,Tb)
N = length(data);
time = linspace(0,N*Tb,samples*N);
signal = zeros(1,length(time));
k = 1;
for n = 1:N
        window = k:k+samples-1;
        signal(window) = signal(window) + data(n)*pulse;
        k = k + samples;
end

在使用变量切片的python中,较大的数组没有工作,所以我改变了但现在我得到了我认为应该工作的但是我不断得到关于不一致的数组大小的错误,即使我在检查大小时调试器看起来应该可以工作。

from numpy import *
def generateRandomSignal(pulse,data,samples,Tb):
    N = data.size;
    time = linspace(0,N*Tb,samples*N);
    signal = zeros((1,time.size));
    k = 0;
    for n in range(0,N):
            signal[k:k+samples] = signal[k:k+samples].copy() + data[n]*pulse[:].copy();
            k = k + samples;
    return time, signal

在Python中执行此操作的正确方法是什么?

编辑:最小预期输入和输出

Input
  data = [1, -1, 0, 1, 1]
  pulse = [1, 1, 1]
  samples = 3. #length of pulse
  Tb = 0.1

Output
  signal = [1, 1, 1, -1, -1, -1, 0, 0, 0, 1, 1, 1, 1, 1, 1]
  time = vector of 15 points evenly spaced from 0 to 0.3.  (Not the problem)

EDIT2错误

ValueError: operands could not be broadcast together with shapes (1920,) (1,4410)

这是产生的实际错误。 (1,4410)是脉冲阵列的正确形状,但我不知道1920来自哪里或空逗号意味着什么

2 个答案:

答案 0 :(得分:3)

signal的定义更改为signal = zeros(time.size)。与Matlab不同,NumPy的一维数组的形状为(N,),而不是(N,1)

答案 1 :(得分:0)

我不明白为什么你应该在信号中有0个索引:

  

signal [0,k:k + samples] = signal [0,k:k + samples] .copy()+ data [n] * pulse [:]。copy();