Matlabの代わりにNumpyを学んでいます。Matlab関数をNumpyにマッピングする際に問題が発生しました。プログラムは、Matlabを使用して2つの信号を追加することです
Matlabバージョン:
function [y.d = sigadd(xl,nl,x2,n2)
% implements y(n) = xi(n)+x2(n)
% [y,nl - sigadd(xi,nl,x2,n2)
X
% xi = first sequence over nl
% x2 - second sequence over n2 (n2 can be different from nl)
%
n = min(min(n1) ,min(n2)) :max(max(nl) ,max(n2)) ; X duration of y(n)
yl - zeros(l,length(n)); y2 = yl;
yl(find((n>=min(nl))&(n<cmar(nl))-l))lxl;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;
y = yl+y2;
私はPythonで次のことを試しました:
def SigAdd(x1,n1,x2,n2):
n_l = min(min(n1),min(n2))
n_h= max(max(n1),max(n2))
n = arange(n_l,n_h+1)
y1 = zeros([1,len(n)],int)
y2 = y1
y1 = (argwhere((n>=min(n1))&(n<=max(n1)))==1)
y1 = x1
y2 = (argwhere((n>=min(n2))&(n<=max(n2)))==1)
y2 = x2
y = y1 + y2
return y,n
推測される結果:
例1:長さが等しくない配列
x1 = array([1,1,1,1,1])
x2 = array([1,1,1,1])
n1 = array([1,2,3,4,5])
n2 = array([1,2,3,4])
y,n = SigAdd(x1,n1,x2,n2)
>> y
array[2,2,2,2,1]
>>n
array[1,2,3,4,5]
例2:同じ長さの配列
x1 = array([1,1,1])
x2 = array([1,1,1])
n1 = array([1,2,3])
n2 = array([3,4,5])
y,n = SigAdd(x1,n1,x2,n2)
>> y
array[1,1,2,1,1]
>>n
array[1,2,3,4,5]
両方の配列の長さが等しい場合は正常に機能しますが、等しくない配列の場合は機能しません。問題は、y1(最初はゼロで作成したもの)をx1の値でオーバーライドして問題を引き起こしていることです。NumpyでMatlabのFindコマンドに相当するargwhereコマンドを使用しましたが、上記のMatlabプログラムのように使用すると、呼び出し可能な関数に値を割り当てることができないというエラーが表示されます。
基本的にMatlabプログラムでは、等しくない配列はゼロで埋められます。Matlabバージョンは、2つの信号の長さが同じで、位置が異なる場合でも条件を処理します。Matlabの代わりにPythonを使用したいのですが、これらの変換の問題が問題を引き起こしています。
いくつかの変更:(しかし、機能していません、インデックスエラー:範囲外です)
def SigAdd(x1,n1,x2,n2):
n_l = min(min(n1),min(n2))
n_h= max(max(n1),max(n2))
n = arange(n_l,n_h+1)
y1 = zeros([1,len(n)],int)
y2 = y1
y11 = argwhere((n>=min(n1))&(n<=max(n1)))
q = 0
for w in y11:
y1[w]= x1[q]
q = q + 1
y22 = argwhere((n>=min(n2))&(n<=max(n2)))
q = 0
for w in y22:
y2[w]= x2[q]
q = q + 1
y = y1 + y2
return y