我们可以在运行时通过sysconf(_SC_PAGESIZE)
提取page_size。我的初衷是将程序启动时的此值放入具有静态存储持续时间的对象中。所以我的意图是在文件范围内声明一些extern
变量,如下所示:
extern const size_t page_size;
但是当我尝试将其定义为文件范围中的其他地方时
const size_t page_size = (const size_t) sysconf(_SC_PAGESIZE);
它不编译。自6.7.9(p4)
起,这似乎很清楚:
初始化器中具有静态或静态对象的所有表达式 线程存储持续时间应为常量表达式或字符串 文字。
我每次需要页面大小时都不想致电sysconf(_SC_PAGESIZE)
。有什么解决方法或常见的解决方案是什么?
答案 0 :(得分:3)
import pandas as pd, numpy as np, matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from geopy.distance import great_circle
from shapely.geometry import MultiPoint
coords1= Lat_Long_pick[['pickup_latitude', 'pickup_longitude']]
coords = Lat_Long_pick.as_matrix(columns=['pickup_latitude', 'pickup_longitude'])
ms_per_radian = 6371.0088
epsilon = 0.00001
db = DBSCAN(eps=epsilon, min_samples=1, algorithm='ball_tree', metric='haversine').fit(np.radians(coords))
cluster_labels = db.labels_
num_clusters = len(set(cluster_labels))
clusters = pd.Series([coords[cluster_labels == n] for n in range(num_clusters)])
print('Number of clusters: {}'.format(num_clusters))
def get_centermost_point(cluster):
centroid = (MultiPoint(cluster).centroid.x, MultiPoint(cluster).centroid.y)
centermost_point = min(cluster, key=lambda point: great_circle(point, centroid).m)
return tuple(centermost_point)
centermost_points = clusters.map(get_centermost_point)
lats, lons = zip(*centermost_points)
rep_points = pd.DataFrame({'lon':lons, 'lat':lats})
rep_points.tail()
rs = rep_points.apply(lambda row: Lat_Long_pick[(Lat_Long_pick['pickup_latitude']==row['lat'])&(Lat_Long_pick['pickup_longitude']==row['lon'])].iloc[0], axis=1)
是一个函数调用。它将始终返回相同的值,但是它仍然是函数调用,因此不能用于在C中初始化全局变量。
如果要避免重复调用该函数,可以将全局变量声明为非sysconf(_SC_PAGESIZE)
,并在应用程序启动期间分配其值。