【发布时间】:2022-11-30 07:43:51
【问题描述】:
假设我执行 n=3 coin-flips,如果抛硬币返回尾巴 (T),则每个 sub_state=True 或如果抛硬币返回正面 (H),则每个 sub_state=False。然后,有 2 ** 3 = 8 可能的 states 因为每个 sub_state 只能接受 2 值(True 或 False)并且有 3 投币试验。
随便列举的8状态是:
- T-T-T
- H-T-T
- T-H-T
- T-T-H
- H-H-T
- H-T-H
- T-H-H
- H-H-H
了解特定系列的抛硬币试验(即 H-T-T)可以揭示当前处于哪个状态。
我想写一个函数;此函数将
sub_states作为输入,其中sub_states是大小为n的布尔数组(即[False, True, True]对应于H-T-T),并返回相应索引(即2 - 1 = 1)作为输出。我不确定如何解决这个问题。我认为可能有办法使用与每个
2**n状态相对应的二进制数01来做到这一点,或者使用numpymagic 和itertools可能是一种更简单的方法。我可以使用哪些途径或方法来解决这个问题?import numpy as np def get_state_index(sub_states): """ Suppose sub_states is a list of boolean values of length 3. Then, there are 2 ** 3 = 8 possible states. sub_states = [False, True, True] ==> state_index = 1 state 0: coin-flips: T-T-T sub-states: [True, True, True] state 1: coin-flips: H-T-T sub-states: [False, True, True] state 2: coin-flips: T-H-T sub-states: [True, False, True] state 3: coin-flips: T-T-H sub-states: [True, True, False] state 4: coin-flips: H-H-T sub-states: [False, False, True] state 5: coin-flips: H-T-H sub-states: [False, True, False] state 6: coin-flips: T-H-H sub-states: [True, False, False] state 7: coin-flips: H-H-H sub-states: [False, False, False] """ raise ValueError("not yet implemented") state_index = ... return state_index if __name__ == '__main__': ## initialize sub-states sub_states = np.full( 3, False, dtype=bool) sub_states[1] = True sub_states[2] = True ## initialize states states = np.full( 2 ** sub_states.size, # len([True, False]) == 2 False, dtype=bool) ## # i = get_state_index(sub_states) ## states[i] = True print(states)
【问题讨论】:
标签: python-3.x numpy indexing boolean binary-data