【问题标题】:Divide binary row and convert each part to float or decimal python 3划分二进制行并将每个部分转换为浮点数或十进制python 3
【发布时间】:2017-11-25 02:19:30
【问题描述】:

我正在使用 python-3.x 并且我试图将 [x] 数组中的每个二进制行分成两部分,前四位数字将成为第一个数字,后四位数字作为第二个数字我将它们转换为浮点数。

有一个函数“def test(binary)”可以将二进制转换为浮点数,并且有两个循环遍历数组。

例如,第一行是:[1, 0, 0, 1, 1, 0, 0, 0] 我想把它分成 1001 - 1000 那么最终结果将是 [9, 8]

import numpy as np
n = 4

##################################
# convert a list of Binary's to decimal
def test(binary):
    wordlength = binary.shape[1]
    shift = np.arange(wordlength-1, -1, -1)
    decimal = np.sum(binary << shift, 1)
    print (decimal)
##################################

np.set_printoptions(threshold=np.nan)


x = np.array([[1, 0, 0, 1, 1, 0, 0, 0],
             [1, 1, 1, 1, 1, 0, 0, 0],
             [1, 0, 0, 1, 1, 1, 0, 1]])

print(x)

for ii in range (3) :
    start_array = 0
    X = x[ii]
    print ("X:" '\n', X)
    #print(ii, X)

    for i in range (2) : 
        end_array= start_array  + n 
        print ("end_array:" '\n', end_array)
        print ("start_array:" '\n', start_array) 
        flot = np.zeros ((3, 2))
        flot[ii, i] = test(x[start_array:end_array])

        print (flot)
        start_array=end_array

但我无法得到正确的结果我不确定问题出在哪里,如果我解决这个问题的方法是正确的

【问题讨论】:

    标签: arrays python-3.x loops binary converter


    【解决方案1】:

    给定一个整数列表,您可以这样做:

    • 转换为字符串列表
    • 使用连接进行连接
    • 将列表分成两半
    • 使用int转换为二进制

    长格式:

    x = [1,0,0,1,1,0,0,0]
    # The following two lines are equivalent - choose the most readable
    strings = ''.join(map(str,x)) # Using map
    strings = ''.join(str(z) for z in x) # Using a list loop
    print(strings)
    strings1 = strings[:4] # First four
    strings2 = strings[-4:] # Last four
    bin1 = int(strings1)
    bin2 = int(strings2)
    # int function takes a second argument for base
    int1 = int(strings1,2)
    int2 = int(strings2,2)
    

    一行:

    int1 = int(''.join(map(str,x))[:4],2)
    int2 = int(''.join(map(str,x))[-4:],2)
    

    适合您的问题,其中包含列表列表:

    # For each element l of list x (l being a list)
    for l in x:
        for z in l:
            int1 = int(''.join(map(str,z))[:4],2)
            int2 = int(''.join(map(str,z))[-4:],2)
            print(int1)
            print(int2)
    

    【讨论】:

    • 感谢您的好方法,但如果我使用 numpy 数组“二进制”的列表,我会收到此错误:ValueError: invalid literal for int() with base 2: '[1 0' 任何想法@mjsqu
    • 我之前用另一种方式尝试过这个方法,但我有同样的错误,这就是为什么我尝试我一开始写的!!!!
    • 已更新,看来numpy数组可能是列表列表的数组,所以我在循环中添加了一个额外的for
    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2017-02-23
    • 2015-10-11
    • 2014-03-01
    相关资源
    最近更新 更多