1

特定の値を持つレコード配列を作成しようとしています。しかし、レコード配列の値を正しく設定できないことに気付きました。レコード配列には、「startstate」(スカラー)、「action」(4x1 配列)、および「transition」(4x2 配列) の 3 つのフィールドがあります。「startstate」は簡単に設定できます。ただし、他の 2 つのフィールドについては、別の配列を使用して値を設定しようとすると、最初の要素しか適切に設定できないようです。次のコードは問題を示しています

    import numpy as np
    NUM_STATES = 4
    NUM_ACTIONS = 2
    NUM_OBS = 2
    strategy_id = 62605133
    new_auto, = np.zeros(1,dtype = [('startstate', np.int32), 
                                ('action', np.int32, NUM_STATES), ('transition', np.int32, (NUM_STATES, NUM_OBS))])
    start_id = strategy_id%10
    action_id = np.int(strategy_id/10)%100
    transition_id = np.int(strategy_id/1000)

    new_auto['startstate'] = start_id
    print new_auto['startstate'],start_id

    action_array = new_auto['action'].copy()
    for i in xrange(NUM_STATES):
        action_array[-1-i] = action_id%NUM_ACTIONS
        action_id = np.int(action_id/NUM_ACTIONS)
    new_auto['action'] = action_array.copy()
    print new_auto['action']
    print action_array

    transition_array = new_auto['transition'].flatten().copy()
    for i in xrange(NUM_STATES*2):
        transition_array[-1-i] = transition_id%NUM_STATES
        transition_id = np.int(transition_id/NUM_STATES)    
    new_auto['transition'] = transition_array.reshape((NUM_STATES,NUM_OBS)).copy()
    print new_auto['transition']
    print transition_array.reshape((NUM_STATES,NUM_OBS))

コードの出力:

    startstate
    3 3

    actions
    [1 0 0 0]
    [1 1 0 1]

    transitions
    [[3 0]
     [0 0]
     [0 0]
     [0 0]]
    [[3 3]
     [1 0]
     [2 0]
     [3 1]]

各フィールドについて、最初の配列は実際の値を示し、2 番目の配列は正しい値を示します。理論的には、以下を使用して値を既に設定しているため、それらは同じであると想定されています。

    new_auto['action'] = action_array.copy()
    new_auto['transition'] = transition_array.reshape((NUM_STATES,NUM_OBS)).copy()

この問題の原因を特定できる人はいますか? 私が使用している派手なバージョンは1.9.2です

4

1 に答える 1