本篇作为上一篇内容的姊妹篇讲述如何采用优雅的方式根据一个shp数据对一个栅格影像数据进行切割。废话不多说,直接进入主题。...传统的方式可以采用Gdal命令行进行一点点的手动处理,稍微智能化一点可以在python程序中发送控制台语句的方式调用gdal命令。作为程序员我们都是想采用最简单、最不需要手工操作、看上去最舒服的方式。...上一个影像的整体截图,以与下述切割后的效果进行对比。 ?...3.4.2 使用rasterio进行切割 其实有了前面的准备这一步也就变的简单了,直接调用rio.mask.mask函数,该函数返回该栅格数据与features相交部分的数组结果以及变换信息...四、总结 本文所介绍的技术可以用于对全国的影像数据进行分省切割,或者省的影像数据进行县市切割等。同理与上一篇文章一致的是凡是这种处理子区域的方式都可以采用此技术。
文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值的弊端 三、尝试在 sequence 中调用挂起函数返回多个返回值 四、协程中调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...在 Kotlin 协程 Coroutine 中 , 使用 suspend 挂起函数 以异步的方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程的挂起和恢复 ① ( 协程的挂起和恢复概念...| 协程的 suspend 挂起函数 ) 博客 ; 如果要 以异步的方式 返回多个元素的返回值 , 可以使用如下方案 : 集合 序列 Suspend 挂起函数 Flow 异步流 二、同步调用返回多个值的弊端...---- 尝试使用 挂起函数 kotlinx.coroutines.delay 进行休眠 , 这样在挂起时 , 不影响主线程的其它操作 , 此时会报如下错误 ; Restricted suspending...---- 如果要 以异步方式 返回多个返回值 , 可以在协程中调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断的 先后 返回 多个 返回值 ; 代码示例 : package
/zenodo.org/record/6332981#.YroV0nZBzic https://github.com/Jingning-Zhang/PlasmaProtein/tree/v1.2 今天的推文重复一下论文中的...Figure1,涉及到5个图,分别是折线图,韦恩图,散点图,频率分布直方图,最后一个知识点是如何将这5个图组合到一起 image.png 首先是定义作图主题的内容 library(ggplot2)...panel.background = element_blank(), title = element_text(size = 7), text = element_text(size = 6) ) 论文中提供的代码没有设置坐标轴的线...,如果按照他的主题来做出图没有横纵坐标轴 第一个折线图的代码 library(readxl) df.peer <- read_excel("data/20220627/Fig1.xlsx", sheet...他这里的韦恩图是借助ggforce这个R包直接画了两个圆 df.venn <- read_excel("data/20220627/Fig1.xlsx", sheet = "1b") library
Functional Interfaces:具有单个抽象方法的接口,促进类似函数的行为。 Streams API:提供了一种功能强大的方法来以函数的方式处理集合。...函数式编程(FP)强调不可变性,鼓励一旦创建数据就避免对其进行更改。 组合与继承: OOP 依赖于类层次结构和继承来实现代码重用和扩展。 FP 更倾向于组合而非继承,鼓励从简单函数构建复杂行为。...FP 旨在通过将副作用限制在定义良好的边界内来最小化副作用,使程序更可预测且更易于推理。 并发性: FP 通过不可变数据和纯函数来促进并发性,这些函数本质上是线程安全的。...表达力和可读性: 由于其强调函数组合和高阶函数,FP 通常会导致更简洁和声明性的代码。 OOP 可以提供清晰的抽象和对真实世界概念的直观建模,从而增强某些类型问题的可读性。...面向对象编程擅长于对具有丰富行为和关系的复杂系统进行建模,而函数式编程则通过不可变的数据和函数纯度来促进更简单,更可预测的代码。
验证逻辑并不是FP独有的,不过FP中常常使用Applicative对数据进行验证,从而收集多个用户Error。...你应该专注于使用FP的代数数据类型进行领域建模,请参考我之前写过一篇使用函数式语言来建立领域模型—类型组合。...对输出的验证则不太一样,主要关心对输出数据的安全性保护,防止将一些领域模型中的私有属性输出到外部世界。...以OO为例,我们习惯于通过增加标志位的方式,进行领域建模: type User = { name: string password: string email: Email | null...,而这个模型无法反映出来这一信息 phone和email被定义为可空类型,导致使用该模型的地方不得不使用null检查 通过状态机的机制,重新考虑用户注册过程:(图5) 按照上面的状态重新对用户建模,得到的模型如下
如果应用程序以隐藏方式使用 ARM 库(如使用语言辅助函数),则可能会出现线程问题。 线程安全的函数 Table 2.1 显示了线程安全的 C 库函数。 Table 2.1....信号处理程序和 FP 捕获设置是整个进程中的全局设置,并使用锁对其进行保护。 这样,即使多个线程同时调用 signal() 或 fenv.h 函数,也不会损坏数据。...每个单独的流都使用锁进行保护,因此,两个线程可以分别打开并使用其自己的 stdio 流,而不会相互干扰。...atexit() atexit() 维护的退出函数列表是进程全局性的,并且使用锁对其进行保护。 在最坏的情况下,如果多个线程调用 atexit(),则不能保证调用退出函数的顺序。 ...非线程安全的函数 函数说明 setlocale() 语言环境设置是所有线程的全局设置,并且未使用锁对其进行保护。如果两个线程调用 setlocale(),则可能会发生数据损坏。
目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!...---- 对基本类型进行支持 guava对JDK提供的原生类型操作进行了扩展,使得功能更加强大! ?...ImmutableMap 可不可以一对多:Multimap JDK提供给我们的Map是一个键,一个值,一对一的,那么在实际开发中,显然存在一个KEY多个VALUE的情况(比如一个分类下的书本),我们往往这样表达...Table Table涉及到3个概念:rowKey,columnKey,value,并提供了多种视图以及操作方法让你更加轻松的处理多个KEY的场景。 ---- 函数式编程:Functions ?...异步回调 我们可以通过guava对JDK提供的线程池进行装饰,让其具有异步回调监听功能,然后在设置监听器即可!
,同一个文件可以被打开多次 文件的关闭 int fclose(FILE *fp);//对已打开的文件进行关闭。...fclose(fp1); fclose(fp2); fclose(fp3); 文件的写入 C语言提供的写函数一共有以下几种: 函数 功能 适用于 fputc 以一个字符为单位进行写入 所有输出流...fputs 以一行为单位进行写入 所有输出流 fwrite 二进制写入 文件 fprintf 格式化写入 所有输出流 snprintf 格式化写入 所有输出流 对于上面的大多数函数,这里就不做过多讲解...snprintf是fprintf的优化版本,相较于fprintf,可以对写入数据进行长度控制,会更加安全。...; } 运行结果如下: 语言操作与系统级别的文件操作区别 实际上,我们所有的语言级别的文件操作都是对系统调用的封装,比如我们使用的fclose,fopen等函数,他们的底层实际上都会调用对应的系统级别的函数
也就是说我们的输入输出是因为stdin和stdout流是默认打开的状态,我们可以根据stdin、stdout来直接对屏幕进行输出: #include int main() {...系统文件IO 除了使用C语言或者其他语言的IO交互,我们也可以采用调用系统接口来进行文件访问,而系统调用时更接近于底层的,其他语言都是对系统的系统调用进行封装的。...通常打开文件的常用方式分为以下几种: flags选项 含义 O_RDONLY 以只读的方式打开文件 O_WRONLY 以只写的方式打开文件 O_APPEND 以追加的方式打开文件 O_CREAT 文件不存在时...不同的行为,同样,open接口的flags参数也是如此使用方式,例如,我们以 使用open模拟fopen函数的 ‘w’ 行为: #include #include<sys/types.h...✈️认识文件描述符 既然open 函数返回值是文件描述符,那么我们可以创建多个open函数,使用多个返回值接收并且打印来观察现象: #include #include<sys/types.h
允许在派生类中对基类的虚函数重新定义。 纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。作为接口而存在 纯虚函数不具备函数的功能,一般不能直接被调用。...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。...编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应) 。
允许在派生类中对基类的虚函数重新定义。 纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。作为接口而存在,纯虚函数不具备函数的功能,一般不能直接被调用。...这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。...(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数...(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用”*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处...编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
而在 V100 上,我们测试的是张量 FLOPs,它以混合精度的方式在 Tensor Cores 上运行:以 FP16 的精度执行矩阵乘法,而以 FP32 的精度进行累加。...TensorFlow TensorFlow 是一个谷歌维护的开源深度学习框架,它使用数据流图进行数值计算。...这些数据边可以传送维度可动态调整的多维数据数组,即张量(tensor)。 TensorFlow 允许我们将模型部署到台式电脑、服务器或移动设备上,并调用这些设备上的单个或多个 CPU 与 GPU。...训练 以下两图展示了 V100 和 P100 GPU 在训练过程中对 RNN 和 LSTM 的加速,这个过程的单精度(FP32)和半精度(FP16)运算都是使用的 NGC 容器。...推断 以下两图展示了 V100 和 P100 GPU 在推断过程中对 RNN 和 LSTM 的加速,这个过程的单精度(FP32)和半精度(FP16)运算都是使用的 NGC 容器。
1行字符-标准输入流(由fp=stdin所指) 原因:同上; 补充:不推荐使用,问题是调用者在使用gets时,不能指定缓冲区buf(用户进程)的长度,这样可能造成缓冲区溢出。...该函数在C++标准库中已不存在,并被证明是不安全的,因为它不对读取的数据进行长度限制,这可能导致缓冲区溢出。因此,应该使用替代函数,例如fgets()或cin。...实现:内存始址ptr<-读N个对象- 流(由fp所指) 原因:以上有一次一个字符或是一次一行的方式进行I/O操作,当我们读或写一个结构时,对于一次一个字符的方式,必须循环通过整个结构,每次循环处理一个字节...;出错:返回-1; 实现:文件(fd)->内存向量中 原因:在一次函数调用中读、写多个非连续缓冲区,但是这些缓冲区已经用iovec表示好了。...;出错:返回-1; 实现:文件(fd)<-内存向量 原因:在一次函数调用中读、写多个非连续缓冲区,但是这些缓冲区已经用iovec表示好了。
除了调用上面的接口来隐式定向外,还可以通过接口显示定向: int fwide(FILE *stream, int mode); fwide 只有在流未定向时才能起作用,对一个已定向的流调用它不会改变流的定向...当已经为流指定了用户提供的缓冲区,使用 setvbuf 不带 buf 参数的方式并不能让系统释放这块内存地址的使用权。...读写 打开一个流后有三种方式可以对其进行读写操作。...tmpfile:以 "wb+" 方式打开一个临时文件流,调用者可以直接使用 tmpnam 的参数 s 用于存储生成的临时文件名,要求它指向的缓冲区长度至少是 L_tmpnam (CentOS 上是 20...虽然演示代码跨越了两个调用,实际上这个接口是原子的,它比 tmpnam + fopen 更安全,后者仍有一定的机率遇到进程间竞争导致的同名文件存在的问题,因此推荐使用前者。
Linux环境下, 使用的C库一般都是glibc, 它封装了几乎所有的系统调用, 代码中使用的“系统调用”, 实际上就是调用C库中的函数。 因为C库函数通过系统调用来实现,库函数对上层提供了C库接口。...为了使不同的文件系统共存, Linux 内核在用户层与具体文件系统之前增加了虚拟文件系统(VFS)中间层,它对复杂的系统进行抽象化,对用户提供了统一的文件操作接口。...• mode 参数用于指定文件的打开方式,注意该参数是一个字符串,输入时需要带双引号: •“r”:以只读方式打开,文件指针位于文件的开头。 •“r+”:以读和写的方式打开,文件指针位于文件的开头。...•“a”:以追加内容的方式打开,若文件不存在会创建新文件,文件指针位于文件的末尾。与” w+”的区别是它不会清空原文件的内容而是追加。 •“a+”:以读和追加的方式打开,其它同上。...fclose 函数: ? fclose 库函数用于关闭指定的文件流,关闭时它会把尚未写到文件的内容都写出。因为标准库会对数据进行缓冲,所以需要使用 fclose 来确保数据被写出。
调用库函数进行文件操作时的流程 ---- ️正文 1、文件理解 先来通过几个问题来理解文件 文件操作的本质是什么?...); 通过文件名以指定打开方式,打开文件 打开方式(参数2) w 只写,如果文件不存在,会新建,文件写入前,会先清空内容 a 追加,在文件末尾,对文件进行追加写入,追加前不会清空内容 r 只读,打开已存在的文件进行读取...* stream ); 关闭已打开文件,只需通过 FILE* 指针进行操作即可 //对上面打开的文件进行关闭 //无论以哪种方式打开,关闭方法都一样 fclose(fp1); fclose(fp2);...、stdout、stderr 它们的文件描述符依次为:0、1、2,也可以通过 close(1) 的方式,关闭标准流 3.3、写入 write write 函数的返回值类型有点特殊,但使用方法与 fwrite...,无论是 Java、Python、PHP 还是其他语言,在进行文件相关操作时,其文件操作函数都有对系统级函数进行封装,也就是说,要想与硬件(磁盘)打交道,必须经过 系统调用 -> OS -> 驱动 这条路线
编写程序从文件读取信息或者将结果写入文件是一种经常性的需求。C提供了强大的和文件进行通信的方法。使用这种方法我们可以在程序中打开文件,然后使用专门的 I/O 函数读取文件或者写入文件。...程序只需要关心是否正确地输出了字节数据,以及是否正确地输入了要读取字节数据,特定 I/O 设备的细节对程序员是隐藏的。 1.1.2.1 文本流 文本流,也就是我们常说的以文本模式读取文件。...如果使用二进制方式打开文件,则不进行 \r\n 和 \n 之间的转换。 那么由于 Linux 下的换行符就是 \n,所以文本文件方式和二进制方式无区别。...最后调用 fclose 函数关闭流。关闭一个流可以防止与它相关的文件被再次访问,保证任何存储于缓冲区中的数据被正确写入到文件中,并且释放 FILE 结构。...“a+” 允许读和追加数据,如果文件不存在则创建 “rb+” 以读/写方式打开一个二进制文件 “wb+” 以读/写方式建立一个新的二进制文件 “ab+” 以读/写方式打开一个二进制文件进行追加 示例代码
对文件进行操作=对内容进行操作or对属性进行操作or对内容和数据同时进行操作。 在任何系统中,标定一个文件,必须使用:文件路径+文件名(唯一性)。...四.系统文件操作接口 我们除了使用C语言函数或者其他语言函数对文件进行相关的操作,我们也可以调用系统文件操作接口来实现对文件的操作,且系统接口更加接近底层,语言层面的函数都是对系统接口的封装。...来做出 不同的行为,同样,open接口的flags参数也是如此使用方式,例如,我们以 使用open模拟fopen函数的 ‘w’ 行为: include #include <...3.read函数 read函数是Linux下的一个系统调用接口,C语言的fread函数的底层就是read。作用为从一个特定的文件流中读取内容。...ssize_t m=read(n,arr,sizeof(arr)); assert(m>0); arr[m]='\0';//使用C语言的方式对内容进行打印,字符串以'\0'结尾,\0=0
文件访问权限:第一个规则是我们用名字打开一个文件时,对该名字包含的每一个目录,包括她可能隐含的当前工作目录(./)都应具有执行权限。对文件有适当的权限,取决于以何种方式打开。...fflus(FILE *fp)此函数使该流所有未写的数据都被传送至内核。 FILE *fdopen(filedes, type)使已有的文件描述符和流关联。...pthread_t pthread_self(void)获得自身线程的ID。主线程可以用线程ID控制哪个线程处理哪些作业。新线程和主线程之间有竞争,使用主线程返回的线程id并不安全。...加锁的一种场景:对引用计数加1、减1以及检查是否为0之前都要锁住互斥量。【引用数类似文件的link】 读写锁以读模式锁住是共享模式【并发读】,以写模式锁住是独占模式【独自写】。...线程的虚拟地址空间是多个线程共用,如果线程多,会不够用。递归类型互斥量可以递归加锁。 线程和信号都涉及函数可重入的问题。信号:捕捉函数如果向全局数据写会错。线程:多个线程同时调用同一函数。
:fopen(文件名,使用文件方式) 程序中可以使用3个标准的流文件 — 标准输入流stdin、标准输出流stdout、标准出错输出流stderr,系统已对这3个文件指定了与终端的对应关系,标准输入流是从终端的输入...10.2.2 用fclose函数关闭数据文件 fclose函数调用的一般形式为:fclose(文件指针) 在使用完一个文件后应该关闭它,以防止它再被误用,关闭就是撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件...fprintf和fscanf函数的读写对象不是终端而是文件,它们的一般调用方式为: fprintf(文件指针,格式字符串,输出表列) fscanf(文件指针,格式字符串,输入表列) 用以上两个函数对磁盘文件读写较为方便...10.3.4 用二进制方式向文件读写一组数据 fread函数和fwrite函数的一般调用形式为:fread(buffer,size,count,fp)、fwrite(buffer,size,count,...函数进行检查,其一般调用形式为ferror(fp);,若其返回值为0,则表示未出错;若其返回值为非零值,则表示出错。
领取专属 10元无门槛券
手把手带您无忧上云