以下代码生成美国地图,其中每个州都有等高线。问题是该图像看起来像是使用 20 世纪 90 年代的技术生成的。如何显着提高图形的质量,即提高背景的分辨率?
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 400
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1], projection=ccrs.LambertConformal())
ax.set_extent([-125, -66.5, 20, 50], ccrs.Geodetic())
ax.stock_img()
shapename = 'admin_1_states_provinces_lakes_shp'
states_shp = shpreader.natural_earth(resolution='110m', category='cultural',
name=shapename)
ax.outline_patch.set_visible(False) # don't draw the map border
ax.set_title('My map of the lower 48')
# example state coloring
colors = {
'Minnesota': [0, 1, 0],
'Texas': "#FF0000",
'Montana': "blue",
}
default_color = [0.9375, …Run Code Online (Sandbox Code Playgroud) 我已经实现了一个由几个类组成的算法框架。对于日志记录,我使用 slf4j 和 logback。我的很多课程都有这样的代码:
protected final Logger logger = LoggerFactory.getLogger(Myclass.class);
...
logger.debug("Some debug information");
Run Code Online (Sandbox Code Playgroud)
现在我想打包我的代码并准备好生产。我如何处理日志代码?
所以理想情况下,用户应该能够启用/禁用日志记录。我通常有一个 logback.xml 配置文件,它在每个类的基础上指定日志级别。我应该在包中包含这样的文件吗?或者我应该期望用户自己编写或提供默认配置文件?
我确实有代码来配置算法:
/**
* Read algorithm confirguration from properties file
**/
protected Configuration(Properties properties){...}
Run Code Online (Sandbox Code Playgroud)
此函数读取属性文件并相应地设置许多算法参数。这可以用于启用/禁用各种类的日志记录吗?
我的任务类在执行之前依赖于其他任务。我想对可以并行的任务进行分组并对它们进行排序。我决定首先可以将其表示为 DAG 并尝试使用 JGrapht。首先,我遍历任务的输入列表以获取所有任务及其依赖项并将它们收集在一个列表中。然后,对于每个任务,我在图中创建一个顶点。
DirectedAcyclicGraph<Task, DefaultEdge> d = new DirectedAcyclicGraph<>(DefaultEdge.class);
Set<Task> all = collectAllTasks(tasks);
all.forEach(d::addVertex);
Run Code Online (Sandbox Code Playgroud)
然后使用相同的列表我尝试在节点之间创建边缘。
all.forEach(task -> {
Set<TaskName> predecessors = task.getPredecessors();
predecessors.forEach(name -> {
Task predecessor = taskService.getTaskByName(name);
d.addEdge(predecessor, task);
});
});
Run Code Online (Sandbox Code Playgroud)
然后我尝试对任务进行分组
private Set<Set<TaskId>> groupTasks(DirectedAcyclicGraph<TaskId, DefaultEdge> dag) {
Set<Set<TaskId>> groups = new LinkedHashSet<>();
Iterator<TaskId> iterator = new TopologicalOrderIterator<>(dag);
iterator.forEachRemaining(taskId -> {
//source?
if (dag.incomingEdgesOf(taskId).isEmpty()) {
if (groups.isEmpty()) {
Set<TaskId> set = new HashSet<>();
set.add(taskId);
groups.add(set);
} else {
groups.iterator().next().add(taskId);
}
}
Set<TaskId> tasks = new HashSet<>(Graphs.successorListOf(dag, taskId)); …Run Code Online (Sandbox Code Playgroud) 由于浮点不精确,java的double不能精确地表示每一个十进制数,即引入了精度误差。给出以下代码:
double d1=0.20976190476190476;
double d2=0.062142857142857146;
System.out.println("d1-d1= "+(d1-d1)); //Prints 0.0.
System.out.println("d1+d2-d2-d1= "+(d1+d2-d2-d1)); //Prints 2.7755575615628914E-17
Run Code Online (Sandbox Code Playgroud)
我很好奇最后一行如何产生精度误差?我假设表达式的计算结果为:((d1+d2)-d2)-d1。因此,即使 d1、d2 或 (d1+d2) 没有准确表示,我也会假设精度误差会相互抵消?