2016-05-16 37 views
1

我正嘗試創建一個具有特定值的記錄數組。但是,我注意到記錄數組的值無法正確設置。記錄數組有三個字段:「startstate」(標量),「動作」(4x1陣列)和「過渡」(4x2陣列)。 「startstate」可以很容易地設置。然而,對於其他兩個字段,當我嘗試使用另一個數組設置它們的值時,似乎只有第一個元素可以適當地設置。下面的代碼說明問題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版本是1.9.2

+0

你能檢查你的輸出嗎?當我運行你的代碼時,我得到了不同的輸出。輸出I具有是 [1 1 0 1] [1 1 0 1] [[3- 3] [1 0] [2 0] [3 1]] [[3- 3] [1 0] [2 0] [3 1]]
pmaniyan

+0

我對收到的輸出肯定是積極的。你使用哪種版本的numpy?我想這是另一個numpy的bug。 – user3821012

+0

嗯,我使用numpy 1.10.4。那麼,所有這些問題都可能是由於Numpy的bug造成的? – pmaniyan

回答

0

看起來這是由於numpy中的錯誤。將版本從1.9.2更新到1.11.0後,輸出如預期。