【问题标题】:Converting MATLAB Slicing into Python using Numpy使用 Numpy 将 MATLAB 切片转换为 Python
【发布时间】: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


【解决方案1】:

更改您的signal的定义signal = zeros(time.size)。与MATLAB不同,NUMPY的1D阵列具有SHAFE (N,),而不是(N,1)

【讨论】:

  • 查看所有我的变量的形状后,我发现数据是一个(1,1920),并且执行数据[n]为所有1920个条目给出了一个数组,而不是每个项目。将其更改为数据[0,n]代码按预期工作。谢谢你的提示 span>
【解决方案2】:

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

信号[0,k:k +样本] =信号[0,k:k +样本] .copy()+数据[n] * pulse [:]。复制();

【讨论】:

  • 。但是,删除它不会产生差异 span>
猜你喜欢
  • 1970-01-01
  • 2015-01-18
  • 2020-10-10
  • 2022-01-19
  • 2022-01-05
  • 2017-06-01
  • 2021-11-26
  • 2021-08-18
  • 2012-06-14
相关资源
最近更新 更多