gpt4 book ai didi

python - 如何有效地找出序数中的数字是什么?

转载 作者:行者123 更新时间:2023-12-01 03:16:06 24 4
gpt4 key购买 nike

这是一个例子:

  1. 4 位数字
  2. 第一、第二位数字的范围是:0 ~ 5(共六位数字)
  3. 第三、第四位数字的范围是:0 ~ 4(共五位数字)

因此,0000、0040、0111、4455 可以,但 5555、4555、4466 则不行。

我想要的是找到序数2345是什么? (从零索引开始)`

例如,0001 是序数“1”。同样,0010 是“5”。

可以通过以下方式计算:

(5*6*6*1)*2 + (6*6*1)*3 + (6*1)*4 + (1)*5 = 497

我用Python创建了一个函数

import numpy as np

def find_real_index_of_state(state, num_cnt_in_each_digit):
"""
parameter
=========
state(str)
num_cnt_in_each_digit(list) : the number of number in each digit
"""
num_of_digit = len(state)
digit_list = [int(i) for i in state]

num_cnt_in_each_digit.append(1)

real_index = 0
for i in range(num_of_digit):
real_index += np.product(num_cnt_in_each_digit[num_of_digit-i:]) * digit_list[num_of_digit-i-1]
return real_index

find_real_index_of_state("2345", [5,5,6,6])

其结果与 497 相同。

问题是,这个函数真的很慢。我需要更快的版本,但这是我能想到的最好的版本。

我真的需要你的建议来提高它的性能。 (例如矢量化等)

谢谢

最佳答案

希望我正确理解你的意思。

我注意到的第一件事是您不需要在每个循环中重新计算所有内容。 IE。您单独计算 (5*6*6*1),(6*6*1),(6*1),(1) 而只需要计算一次。

def find_real_index_of_state(state,num_cnt_in_each_digit):

factor = 1

total = 0

for digit, num_cnt in zip(reversed(state), reversed(num_cnt_in_each_digit)):

digit = int(digit)

total += digit*factor

factor*= num_cnt

return total

关于python - 如何有效地找出序数中的数字是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42456944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com