【发布时间】:2016-02-10 06:33:05
【问题描述】:
我无法将一些 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 的来源或空逗号的含义
【问题讨论】:
-
你能放一个简单的示例输入和预期输出吗?
-
添加了一个小样本输入和输出,希望能更好地解释我的意图
-
对问题的附加部分有点困惑。
pulse有 4410 个元素,但样本数是 1920。我不确定 MATLAB 是如何没有抛出错误的,因为添加两个向量的方式在维度上不一致......除非我没有在阅读代码正确。 -
使用
.shape而不是.size。 shape 包含有关每个维度的信息,size 只是项目的总数。 -
@rayryeng 我仍然认为代码不适用于
samples != len(pulse)...除非我也没有正确阅读它......
标签: python arrays matlab numpy scipy