【问题标题】:Python equivalent for Matlab vector sliceMatlab向量切片的Python等价物
【发布时间】:2017-11-17 07:31:19
【问题描述】:

我在 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(),但我有点卡住了。

【问题讨论】:

    标签: matlab numpy slice


    【解决方案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 的数字,它会提取 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'
    

    【讨论】:

    • 谢谢!我没有想过在 Octave 中尝试它来解决它。
    • np.binary_repr 可能是开始,给出类似的字符串版本。
    猜你喜欢
    • 2021-11-02
    • 2016-09-18
    • 2018-05-29
    • 2020-02-13
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2019-11-30
    相关资源
    最近更新 更多