Python 转换为datetime对象会导致numpy函数崩溃
我的python脚本产生了一个奇怪的错误,我不知道为什么。也许其他人都有主意。 尝试提供一个其他人都应该能够运行的示例Python 转换为datetime对象会导致numpy函数崩溃,python,numpy,Python,Numpy,我的python脚本产生了一个奇怪的错误,我不知道为什么。也许其他人都有主意。 尝试提供一个其他人都应该能够运行的示例 import datetime import numpy as np date = np.array([20120203123054, 20120204123054]) #date format: YYYYMMDDhhmmss longitude = np.array([52., 53.]) latitude = np.array([-22.0, -23.0]) # Lo
import datetime
import numpy as np
date = np.array([20120203123054, 20120204123054]) #date format: YYYYMMDDhhmmss
longitude = np.array([52., 53.])
latitude = np.array([-22.0, -23.0])
# Loop to convert date into datetime object
date_new = []
for j in range(len(date)):
date_string = str(date[j])
dt=datetime.datetime.strptime(date_string[:],'%Y%m%d%H%M%S')
date_new.append(dt)
data = np.array([date, longitude, latitude])
data_new = np.array([date_new, longitude, latitude])
#function to calculate distance between two locations (fixed location:
#longitude=50.,latitude=-20.)
def calculate_distance(longi, lati):
distance = []
latitude = ((50. + lati)/2)* 0.01745
dx = 111.3 * np.cos(latitude) * (50. - longi)
dy = 111.3 * (-20. - lati)
d = np.sqrt(dx * dx + dy * dy)
distance.append(d)
return distance
#call function
calculate_distance(data[1], data[2]) # Script works!
calculate_distance(data_new[1], data_new[2]) # Script doesn't work!
# see Traceback below
为什么会崩溃
Traceback(most recent call last):
File "data_analysis.py" line 85,
dx = 111.3 * cos(latitude) * (lon_station - longitude)
AttributeError: cos
numpy
数组不能很好地处理异构类型。当您创建新的data\u
时,您在其中存储了不同种类的Python对象,因此迫使dtype
成为object
足够宽,可以处理所有内容
>>> data
array([[ 2.01202031e+13, 2.01202041e+13],
[ 5.20000000e+01, 5.30000000e+01],
[ -2.20000000e+01, -2.30000000e+01]])
>>> data.dtype
dtype('float64')
>>> data_new
array([[datetime.datetime(2012, 2, 3, 12, 30, 54),
datetime.datetime(2012, 2, 4, 12, 30, 54)],
[52.0, 53.0],
[-22.0, -23.0]], dtype=object)
>>> data_new.dtype
dtype('O')
由于获取任意对象的余弦没有意义,因此没有实现:
>>> np.cos(data[1])
array([-0.16299078, -0.91828279])
>>> np.cos(data_new[1])
Traceback (most recent call last):
File "<ipython-input-87-00101e4be00a>", line 1, in <module>
np.cos(data_new[1])
AttributeError: cos
FWIW在处理这种混合类型的数据时,我更喜欢数据帧,但人们的偏好各不相同。我对numpy结构化数组了解不够,不知道您是否可以混合对象数据类型和更原始的数据类型,尽管我不这么认为。请提供。在没有SSCCE的情况下,这只是一个猜测,但您的数组可能有
dtype=object
。
>>> np.cos(data_new[1].astype(float))
array([-0.16299078, -0.91828279])