Python相当于Matlab矢量切片

时间:2017-06-15 00:36:56

标签: matlab numpy slice

我在Matlab中有以下代码(我没有Matlab),显然是通过采样二进制值序列来构造整数:

velocity_LUT_10bit = zeros(2^10,1);
for n = 1:length(velocity_LUT_10bit),
    imagAC = bin2dec(num2str(bitget(n-1,9:-1:6))) - bitget(n-1,10)*2^4;       % Imaginary part of autocorrelation: signed 5-bit integer
    realAC = bin2dec(num2str(bitget(n-1,4:-1:1))) - bitget(n-1, 5)*2^4;       % Real part of autocorrelation: signed 5-bit integer
    velocity_LUT_10bit(n) = velNyq_CF*angle((realAC+0.5)/16 + 1i*(imagAC+0.5)/16)/pi;
end;

我无法理解bitget()功能。从docs开始,第一个arg是采样序列,而第二个arg指定样本的范围,但我对切片x:-y:z的含义感到困惑。我理解它从docs作为“从索引 x z 的样本,从 y ”的步幅向右移动。这是对的吗?

bin2dec(num2str(bitget(n-1,9:-1:6)))的numpy等价物是什么?我知道我应该使用numpy.packbits(),但我有点卡住了。

1 个答案:

答案 0 :(得分:1)

在Octave会议中:

>> for n=0:3:15,
   bitget(n,1:1:5)
end
ans =
   0   0   0   0   0
ans =
   1   1   0   0   0
ans =
   0   1   1   0   0
ans =
   1   0   0   1   0
ans =
   0   0   1   1   0
ans =
   1   1   1   1   0

这只是数字的二进制表示,具有切片选择的位。 Octave / Matlab正在使用' start:step:stop'语法。

其余的将数字转换为字符串,从二进制转换为十进制:

>> num2str(bitget(13,5:-1:1))
ans = 0  1  1  0  1
>> bin2dec(num2str(bitget(13,5:-1:1)))
ans =  13

bitget(n-1,9:-1:6)必须以相反的顺序取出第9位到第6位(2的幂)。因此,对于最多2 ^ 10-1的数字,它会拔出“#bit”位。 1-4,5,6-9和10.

我不熟悉Python / numpy二进制表示,但这是一个开始:

>> num2str(bitget(100,10:-1:1))
ans = 0  0  0  1  1  0  0  1  0  0
In [434]: np.binary_repr(100,10)
Out[434]: '0001100100'