查找类型错误减去两个相同大小和类型的 numpy.ndarrays
我试图通过从罗盘航向中减去太阳方位角来找到传感器与太阳的相对位置。出于测试目的,我有两个 numpy 向量。一份带有 52 个不同样本的太阳方位角,另一份带有 52 个不同样本的指南针。
我一直在 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/
所有值似乎都是正确的,我只是无法将这些值相减。它只发生在这些向量上。我可以在代码中的其他地方以相同的方式添加和减去其他向量。
我希望我已经解释了我的情况。我希望能帮助您理解该错误。
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这看起来像你的数组是一个 结构化数组 你可以检查一下通过使用
a.dtype
和b.dtype
如果输出看起来像dtype('float64')
它们我错了,但如果它看起来喜欢[('f0', ' 那么数组的元素是带有浮点数的记录,而不是浮点数本身,并且 numpy 不知道如何操作它们。
例如这个:
this looks like your array is an structured array You can check it by using
a.dtype
andb.dtype
if the output looks likedtype('float64')
them I am wrong, but if it looks like[('f0', '<f8')]
then the elements of your array(s) are records with floats, not floats themselves, and numpy does not know how to operate them.This for example: