2011-11-30 51 views
0

我想通過從羅盤標題中減去太陽方位來找到我的傳感器相對於太陽的位置。出於測試目的,我有兩個numpy向量。一個用52個不同樣品的太陽方位角,另一個用52個不同樣品的指南針。查找類型錯誤減去相同大小和類型的兩個numpy.ndarrays

我一直在做numpy向量的這種操作數,所以我不知道它爲什麼會給我下面的錯誤。

TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray' 

這是一些代碼,我會嘗試包括儘可能多的,但它來自一個較大的代碼庫。

####STUFF above#### 

    # for debugging 
    a = dalecData.get_solar_azimuth() 
    b = dalecData.get_cmp_heading() 

    print type(a) 
    print type(b) 

    print a.shape 
    print b.shape 

    print a.flags 
    print b.flags 

    print a.ndim 
    print b.ndim 

    a - b 

    #work aroundS ???? 

    #sensorAzimuth = subract(dalecData.get_solar_azimuth(),dalecData.get_cmp_heading()) 
    #sensorAzimuth = asarray(dalecData.get_solar_azimuth()) - asarray(dalecData.get_cmp_heading())## wtf? 
    #for i in range(0,dalecData.get_solar_azimuth().shape[0]): 
    # sensorAzimuth[i] = dalecData.get_solar_azimuth()[i] - dalecData.get_cmp_heading()[i] 

給我下面的輸出

<type 'numpy.ndarray'> 
    <type 'numpy.ndarray'> 
    (52, 1) 
    (52, 1) 
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : False 
    OWNDATA : True 
    WRITEABLE : True 
    ALIGNED : True 
    UPDATEIFCOPY : False 
    C_CONTIGUOUS : True 
    F_CONTIGUOUS : False 
    OWNDATA : True 
    WRITEABLE : True 
    ALIGNED : True 
    UPDATEIFCOPY : False 
    2 
    2 

所有的 '變通' 的給予同樣的錯誤使用

# viewing geometry 
    self.__solarZenith = zeros((1)) 
    self.__solarAzimuth = zeros((1)) 

訪問者

載體被初始化

def get_solar_zenith(self): 
     return self.__solarZenith 


    def get_solar_azimuth(self): 
     return self.__solarAzimuth 

    def set_cmp_heading(self,value): 
     self.__cmpHeading = value 

,人口使用

row = self.findClosestDatetime(self.__edStartTime[i], self.__cmpDateTime) 
    heading = vstack((heading, self.__cmpHeading[row-1])) 
    heading = delete(heading,0,0) # get rid of initialised 0 
    self.set_cmp_heading(heading) 

這應該重採樣數據到edStartTime採樣時間。似乎工作。

太陽高度和方位角使用pysolar http://pysolar.org/

所有值的計算似乎是正確的,我只是不能相互減去值。它只發生在這些載體上。我可以在我的代碼中的其他地方以相同的方式添加和減去其他向量。

我希望我已經解釋了我的情況。我很感謝幫助理解錯誤。

感謝

+1

檢查類型的數組中的元素,你減去 –

+2

通過一些奇怪的機會嘗試還檢查'a.dtype'和'b.dtype' –

+0

他們是字符串數組?如果你對字符串數組(或帶有字符串字段的結構化數組)進行數學運算,你會得到相同的錯誤。對於任何不支持減法的dtype(或python類型)也是如此(儘管字符串數組是我能想到的唯一一個)。 –

回答

0

這看起來像你的陣列是一個structured array您可以通過使用a.dtypeb.dtype如果輸出看起來像dtype('float64')他們我錯了檢查,但如果它看起來像[('f0', '<f8')]那麼你的數組中的元素( s)是帶有浮標的記錄,而不是浮標本身,而numpy不知道如何操作它們。

此例如:

>>> x = np.array([1,2,3]) 
>>> x.dtype 
dtype('int64') 
>>> np.diff(x) 
array([1, 1]) 
>>> x.dtype = np.dtype([('f0', '<i8')]) 
>>> np.diff(x) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 998, in diff 
return a[slice1]-a[slice2] 
TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'numpy.ndarray' 
相關問題