我目前正在做的是遗传算法的实现。我已经编写了交叉和变异方法,现在正在编写我的健身方法。
我需要将0和1的列表转换为十进制值以计算距离。
我正在使用的当前输出是1s和0s的整数值列表。 (下面的示例):
Dim rng As Range
Set rng = ActiveSheet.Range("B:B").Find("hello")
If rng Is Nothing Then Exit Sub
Dim rw As Long
rw = rng.Row + 1
Do While ActiveSheet.Cells(rw, 2) = ""
Rows(rw).Delete
Loop
我想将这些数字转换为它们所尊重的二进制等价物。 我尝试将列表转换为4组,然后调用binaryToDecimal函数将位转换为十进制值。但是,我收到错误消息'TypeError:'numpy.ndarray'对象不可调用'。 我已经总结了我的代码,到目前为止是这样。
[[0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]]
<class 'list'>
我想要的示例输出是: [[0,13,6,8,12,12,10,9,15],[0,8,7,0,4,4,1,8,15]]
答案 0 :(得分:0)
尝试此代码。
def converting_binary_to_decimal(L):
output = []
for l in L:
l = list(map(str, l))
sub_output = []
for j in range(0, len(l)-1, 4):
sub_output.append(int(''.join(l[j:j+4]), 2))
output.append(sub_output)
return output
L = [[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]]
converting_binary_to_decimal(L)
答案 1 :(得分:0)
我想我明白了。
x=[0, 1, 1, 0]
k = 4
n = len(x)//k
for i in range(n):
y = x[i*k:(i+1)*k]
y = [str(j) for j in y]
y = ''.join(y)
y = int(y,2)
print(y)
谢谢。