2016-05-16 8 views
1

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

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]] 

を二番目の配列は正しい値を与えながら、最初の配列は、実際の値を与えます。理論的には、彼らは私はすでに次を使用して値を設定しているので、同じことになっている:

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

誰もがこの問題の原因を識別するのに役立つだろうか? 私が使用しているnumpy verisonは1.9.2

+0

出力を確認できますか?私はあなたのコードを実行するときに別の出力を得ています。私は、出力は[[[3,3] 1 0] [2 0] [3 1] [1 1 0 1] [1 1 0 1] ある [3,3] [1 0] [2 0] [3 1]
pmaniyan

+0

私が受け取った出力は確かに肯定的です。 numpyのどのバージョンを使用しますか?私はそれがnumpyの別のバグだと思います。 – user3821012

+0

ええと、私はnumpy 1.10.4を使用します。だから、このすべての問題はナンシーバグに起因する可能性がありますか? – pmaniyan

答えて

0

これはnumpyのバグが原因であるようです。バージョンを1.9.2から1.11.0に更新すると、期待どおりの出力が得られます。

関連する問題