划分二进制行并将每个部分转换为浮点数或小数 python 3
Divide binary row and convert each part to float or decimal python 3
我正在使用 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
但是我无法得到正确的结果我不确定问题出在哪里,如果我解决这个问题的方法是正确的
给定一个整数列表,你可以这样做:
- 转换为字符串列表
- 使用 join
连接
- 将列表分成两半
- 用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)
我正在使用 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
但是我无法得到正确的结果我不确定问题出在哪里,如果我解决这个问题的方法是正确的
给定一个整数列表,你可以这样做:
- 转换为字符串列表
- 使用 join 连接
- 将列表分成两半
- 用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)