2011-03-27 55 views
0

我想用下面的代碼蟒蛇NumPy的偏色問題

self.indeces = np.arange(tmp_idx[len(tmp_idx) -1]) 
    self.samples = np.interp(self.indeces, tmp_idx, tmp_s) 

其中tmp_idx和tmp_s是numpy的陣列進行插值。我收到以下錯誤:

array cannot be safely cast to required type

你知道如何解決這個問題嗎?

UPDATE:

class myClass 
    def myfunction(self, in_array, in_indeces = None): 
     if(in_indeces is None): 
      self.indeces = np.arange(len(in_array)) 
     else: 
      self.indeces = in_indeces  
     # clean data 
     tmp_s = np.array; tmp_idx = np.array; 
     for i in range(len(in_indeces)): 
      if(math.isnan(in_array[i]) == False and in_array[i] != float('Inf')): 
       tmp_s = np.append(tmp_s, in_array[i]) 
       tmp_idx = np.append(tmp_idx, in_indeces[i]) 
     self.indeces = np.arange(tmp_idx[len(tmp_idx) -1]) 
     self.samples = np.interp(self.indeces, tmp_idx, tmp_s) 
+0

適合我。 'tmp_idx'和'tmp_s'的類型是什麼?你能否提供一個更完整的例子來輸出一個錯誤? – tkerwin 2011-03-27 02:43:44

+0

請向我們展示'self.indeces.dtype','tmp_idx.dtype'和'tmp_s.dtype'。 – unutbu 2011-03-27 02:44:37

+0

他們是int64對象對象。我要更新 – Bob 2011-03-27 02:52:01

回答

2

你的一個可能的問題是,當你有下面這行:

tmp_s = np.array; tmp_idx = np.array; 

要設置tmp_stmp_idx的內置功能np.array。然後當你追加時,你有對象類型的數組,其中np.interp不知道如何處理。我想你可能認爲你正在創建零長度的空數組,但這不是如何numpy或python的作品。

嘗試像,而不是執行以下操作:

class myClass 
    def myfunction(self, in_array, in_indeces = None): 
     if(in_indeces is None): 
      self.indeces = np.arange(len(in_array)) 
      # NOTE: Use in_array.size or in_array.shape[0], etc instead of len() 
     else: 
      self.indeces = in_indeces  
     # clean data 
     # set ii to the indices of in_array that are neither nan or inf 
     ii = ~np.isnan(in_array) & ~np.isinf(in_array) 
     # assuming in_indeces and in_array are the same shape 
     tmp_s = in_array[ii] 
     tmp_idx = in_indeces[ii] 
     self.indeces = np.arange(tmp_idx.size) 
     self.samples = np.interp(self.indeces, tmp_idx, tmp_s) 

沒有保證,這將很好地工作,因爲我不知道你的輸入或預期的產出,但這應該讓你開始。注意,在numpy中,如果有一種方法在整個數組上執行所需的操作,則通常不鼓勵循環訪問數組元素,並一次對它們進行操作。使用內置的numpy方法總是快得多。肯定看穿numpy文檔,看看有什麼方法可用。你不應該像對待一個普通的Python列表一樣對待numpy數組。

+0

上面的代碼,它似乎正在工作......是否有可能強制一個numpy數組是一些特定的數據,比如float或double? – Bob 2011-03-27 03:46:37

+0

@Banana,array.astype(type)將返回數組的轉換副本。一般來說,最好確保數組在創建時具有正確的類型。 – 2011-03-27 03:50:51