-
Notifications
You must be signed in to change notification settings - Fork 0
/
search.xml
1377 lines (1374 loc) · 156 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>毕业快乐</title>
<url>/2021/06/19/%E6%AF%95%E4%B8%9A%E5%BF%AB%E4%B9%90/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script>
]]></content>
</entry>
<entry>
<title>ubuntu20.04换源与中文输入法+chrome+LinuxQQ的安装</title>
<url>/2020/06/25/ubuntu20.04%E6%8D%A2%E6%BA%90%E4%B8%8E%E4%B8%AD%E6%96%87%E8%BE%93%E5%85%A5%E6%B3%95+chrome+LinuxQQ%E7%9A%84%E5%AE%89%E8%A3%85/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>安装了最新的ubuntu20.04,赶紧来配置一下吧</p>
<a id="more"></a>
<h3 id="换源">1. 换源</h3>
<p>在gnome中不需要手动操作文本进行换源,比全命令行方便很多</p>
<p>点击左下角的<code>show applications</code>按钮,找到<code>Software&Updates</code>,点进去</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20200625142754297.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="设置页面" /><figcaption>设置页面</figcaption>
</figure>
<p>在其中点击<code>Download from</code>按键,下拉菜单中点击<code>other</code>,然后在其中找到国内你喜欢的源就可以了。推荐使用阿里镜像(我觉得比其他源下载更快</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20200625143227790.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="选择镜像站" /><figcaption>选择镜像站</figcaption>
</figure>
<p>保存退出即可</p>
<h3 id="chrome的安装">2. chrome的安装</h3>
<p>ubuntu并不自带chrome,需要自行安装</p>
<p>可以通过以下命令下载安装包</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb</span><br></pre></td></tr></table></figure>
<p>当然也可以进入官网下载(在ubuntu的火狐浏览器上打开官网,这样才默认下载linux版安装包)</p>
<p>下载完成后,找到安装包所在文件夹,右键点击<code>Open in Terminal</code></p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">sudo apt install ./google-chrome-stable_current_amd64.deb</span><br></pre></td></tr></table></figure>
<p>在左下角的<code>Show Applications</code>中打开chrome即可 <img src="https://img-blog.csdnimg.cn/20200625151902101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /></p>
<h3 id="中文输入法-fcitx">3. 中文输入法 "fcitx"</h3>
<p>ubuntu20.04暂不支持搜狗输入法,所以使用fcitx(Fcitx[ˈfaɪtɪks]是 (Free Chinese Input Toy for X) 的英文缩写,由谷歌中国开发) 首先安装fctix,在终端中输入</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">sudo apt-get install fcitx-googlepinyin</span><br></pre></td></tr></table></figure>
<p>如图点击language support进行配置 <img src="https://img-blog.csdnimg.cn/20200625155744224.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /> 初次打开时它会提示安装一堆东西,直接确认安装即可</p>
<p>在下方选择fcitx <img src="https://img-blog.csdnimg.cn/2020062516002936.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /> 接着重启电脑,可以看到右上角多了一个小键盘按键,点击config <img src="https://img-blog.csdnimg.cn/20200625160329592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /> 点击左下角的小加号,进入到<code>Add inpt method</code>页面,然后取消左下角的<code>Only Show current Language</code>勾选,在搜索框搜索pinyin,选择<code>Google pinyin</code>点击ok即可。</p>
<blockquote>
<p>==<strong>注意是<code>Google pinyin</code>,不是我下图中选中的这个。图中因为我已经安装好了<code>Google pinyin</code>,所以没有显示出来</strong>==。<del>当然如果想要安装这个也是可以的</del></p>
</blockquote>
<figure>
<img src="https://img-blog.csdnimg.cn/20200625161111964.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>保存好后关闭窗口,然后就可以输入中文了。切换输入法的快捷键是<code>ctrl+space</code>,也可以手动点击右上角的小键盘标志进行设置</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20200625161903732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<h3 id="qq-for-linux安装">4.QQ for linux安装</h3>
<p>首先进入QQ官网下载安装包,网站为<code>https://im.qq.com/linuxqq/download.html</code> 可以看到支持的版本非常多 <img src="https://img-blog.csdnimg.cn/20200625170451981.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /> 根据处理器的架构进行选择下载 我下载的是<code>x64的shell版本</code> <img src="https://img-blog.csdnimg.cn/20200625170611711.png" alt="在这里插入图片描述" /> 这里直接用命令<code>sudo ./linuxqq_2.0.0-b2-1082_x86_64.sh</code>进行安装可能会产生如下报错 <figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">sudo: ./linuxqq_2.0.0-b2-1082_x86_64.sh: <span class="built_in">command</span> not found</span><br></pre></td></tr></table></figure> 通过如下面的方法进行解决 找到安装包,右键点击属性</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20200625170708252.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>勾选上如下内容</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20200625170739124.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>保存好后关闭窗口,在本地打开终端 输入命令(根据版本的不同可能要进行适当的改变) <figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">sudo ./linuxqq_2.0.0-b2-1082_x86_64.sh</span><br></pre></td></tr></table></figure> 等待安装完成即可,在应用中找到QQ,然后就可以登陆啦 <img src="https://img-blog.csdnimg.cn/20200625171124316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /></p>
]]></content>
<categories>
<category>ubuntu</category>
</categories>
<tags>
<tag>配环境</tag>
<tag>ubuntu</tag>
</tags>
</entry>
<entry>
<title>利用爬虫框架获取番剧排行榜</title>
<url>/2020/11/30/%E5%88%A9%E7%94%A8%E7%88%AC%E8%99%AB%E6%A1%86%E6%9E%B6%E8%8E%B7%E5%8F%96%E7%95%AA%E5%89%A7%E6%8E%92%E8%A1%8C%E6%A6%9C/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>scrapy框架笔记,参考官方文档与部分教程,完成一个爬虫程序,爬取了b站的2021年1月番剧数</p>
</blockquote>
<a id="more"></a>
<h3 id="创建项目">1. 创建项目</h3>
<p>在需要存储的代码目录下输入</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">scrapy startproject animeRankSpider</span><br></pre></td></tr></table></figure>
<p>该命令生成如下文件夹结构</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">|--animeRankSpider</span><br><span class="line"> |--scrapy.cfg</span><br><span class="line"> |--animeRankSpider</span><br><span class="line"> |--__init__.py</span><br><span class="line"> |--items.py</span><br><span class="line"> |--middlewares.py</span><br><span class="line"> |--pipelines.py</span><br><span class="line"> |--settings.py</span><br><span class="line"> |--spiders.py</span><br><span class="line"> |--__init__.py</span><br></pre></td></tr></table></figure>
<p>这些文件分别为:</p>
<ul>
<li><code>scrapy.cfg</code> 为scrapy的配置文件</li>
<li><code>items.py</code> 为爬取内容的每个小单元设计,称之为item</li>
<li><code>middlewares.py</code> 为爬虫中间件</li>
<li><code>pipelines.py</code> 为信息处理过程的设计</li>
<li><code>setting.py</code> 为爬虫的一些设置</li>
</ul>
<h3 id="设计爬虫单元scrapy中称为item">2. 设计爬虫单元(scrapy中称为<code>item</code>)</h3>
<p>观察b站新番相关数据,我准备爬取的内容为新番标题、弹幕量、播放量、追番人数、排名。</p>
<p>打开<code>items.py</code>,输入如下内容</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> scrapy</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">AnimerankspiderItem</span><span class="params">(scrapy.Item)</span>:</span></span><br><span class="line"> <span class="comment"># define the fields for your item here like:</span></span><br><span class="line"> <span class="comment"># name = scrapy.Field()</span></span><br><span class="line"> name = scrapy.Field()</span><br><span class="line"> rank = scrapy.Field()</span><br><span class="line"> view = scrapy.Field()</span><br><span class="line"> bullet = scrapy.Field()</span><br><span class="line"> like = scrapy.Field()</span><br><span class="line"> <span class="keyword">pass</span></span><br></pre></td></tr></table></figure>
<h3 id="网页分析">3. 网页分析</h3>
<p>爬取的网站为<code>https://www.bilibili.com/v/popular/rank/bangumi</code> ,可以在终端中输入下面的指令帮助分析</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">scrapy shell "https://www.bilibili.com/v/popular/rank/bangumi"</span><br></pre></td></tr></table></figure>
<p>例如,在输入时</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">response.xpath('//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a/text()')</span><br></pre></td></tr></table></figure>
<p>会有输出</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">[<Selector xpath='//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a/text()' data='Re:从零开始的异世界生活 第二季 后半'>]</span><br></pre></td></tr></table></figure>
<p>也就是说可以根据页面中元素的xpath路径可以找到网页中元素的位置,这正是爬虫所需要的</p>
<p>这里安利一款chrome插件<code>Xpath Helper</code> ,可以帮助分析Xpath</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20210117220922596.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="新番标题xpath" /><figcaption>新番标题xpath</figcaption>
</figure>
<p>观察两部新番标题的Xpath,分别为</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a</span><br><span class="line">//*[@id="app"]/div[2]/div[2]/ul/li[2]/div[2]/div[2]/a</span><br></pre></td></tr></table></figure>
<p>可以发现,差别仅在于标签<code>li</code>后面的系数。经过进一步验证,发现网站的其他内容也有类似的格式</p>
<p>因此分析结果如下,<code>index</code>代表不同新番的系数,从1开始取值</p>
<ul>
<li>标题格式<code>//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/a</code></li>
<li>播放量<code>//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[1]</code></li>
<li>弹幕量<code>//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[2]</code></li>
<li>追番人数<code>//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[3]</code></li>
<li>排序<code>//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[1]</code></li>
</ul>
<h2 id="爬虫编写">4.爬虫编写</h2>
<p>输入命令,引号中内容为爬虫网站的主域名</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">scrapy genspider animeRankSpider "bilibili.com"</span><br></pre></td></tr></table></figure>
<p>在animeRankSpider/spiders文件夹下创建了一个py结尾的新爬虫文件,输入如下代码</p>
<figure class="highlight python"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> scrapy</span><br><span class="line"><span class="keyword">from</span> animeRankSpider.items <span class="keyword">import</span> AnimerankspiderItem</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">BilibiliSpider</span><span class="params">(scrapy.Spider)</span>:</span></span><br><span class="line"> name = <span class="string">'animeRankSpider'</span></span><br><span class="line"> allowed_domains = [<span class="string">'bilibili.com'</span>]</span><br><span class="line"> start_urls = [<span class="string">'https://www.bilibili.com/v/popular/rank/bangumi'</span>]</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">parse</span><span class="params">(self, response)</span>:</span></span><br><span class="line"> <span class="comment"># filename = 'rank.html'</span></span><br><span class="line"> <span class="comment"># open(filename, 'wb').write(response.body)</span></span><br><span class="line"> items = []</span><br><span class="line"> rootPath = <span class="string">'//*[@id="app"]/div[2]/div[2]/ul'</span></span><br><span class="line"> <span class="keyword">for</span> index <span class="keyword">in</span> range(<span class="number">49</span>):</span><br><span class="line"> item = AnimerankspiderItem()</span><br><span class="line"> namePath = rootPath + <span class="string">'/li[{}]/div[2]/div[2]/a/text()'</span>.format(index)</span><br><span class="line"> viewPath = rootPath + <span class="string">'/li[{}]/div[2]/div[2]/div[2]/span[1]/text()'</span>.format(index)</span><br><span class="line"> rankPath = rootPath + <span class="string">'/li[{}]/div[1]/text()'</span>.format(index)</span><br><span class="line"> bulletPath = rootPath + <span class="string">'/li[{}]/div[2]/div[2]/div[2]/span[2]/text()'</span>.format(index)</span><br><span class="line"> likePath = rootPath + <span class="string">'/li[{}]/div[2]/div[2]/div[2]/span[3]/text()'</span>.format(index)</span><br><span class="line"> name = response.xpath(namePath).extract()</span><br><span class="line"> view = response.xpath(viewPath).extract()</span><br><span class="line"> rank = response.xpath(rankPath).extract()</span><br><span class="line"> bullet = response.xpath(bulletPath).extract()</span><br><span class="line"> like = response.xpath(likePath).extract()</span><br><span class="line"> item[<span class="string">'name'</span>] = name</span><br><span class="line"> item[<span class="string">'view'</span>] = view</span><br><span class="line"> item[<span class="string">'rank'</span>] = rank</span><br><span class="line"> item[<span class="string">'bullet'</span>] = bullet</span><br><span class="line"> item[<span class="string">'like'</span>] = like</span><br><span class="line"> items.append(item)</span><br><span class="line"> <span class="keyword">return</span> items</span><br></pre></td></tr></table></figure>
<h2 id="运行爬虫">5. 运行爬虫</h2>
<p>终端中输入命令</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">scrapy crawl animeRankSpider -o out.csv</span><br></pre></td></tr></table></figure>
<p>等待片刻,生成的out.csv即为爬虫所得,可以用记事本或者excel打开</p>
<figure>
<img src="https://img-blog.csdnimg.cn/20210117211750595.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="新番排行榜" /><figcaption>新番排行榜</figcaption>
</figure>
<p>代码上传到了百度网盘,链接如下</p>
<p>链接:https://pan.baidu.com/s/1HzjZdmUQ-u7FeapgyAH8vA 提取码:lhvh</p>
<h3 id="参考资料">参考资料</h3>
<ul>
<li><a href="https://www.osgeo.cn/scrapy/intro/tutorial.html" target="_blank" rel="noopener">scrapy文档</a></li>
<li><a href="https://www.runoob.com/w3cnote/scrapy-detail.html" target="_blank" rel="noopener">scrapy教程</a></li>
</ul>
]]></content>
<categories>
<category>笔记</category>
</categories>
<tags>
<tag>爬虫</tag>
</tags>
</entry>
<entry>
<title>《置身事内》阅读总结</title>
<url>/2022/12/05/%E3%80%8A%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85%E3%80%8B%E9%98%85%E8%AF%BB%E6%80%BB%E7%BB%93/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>一本有关中国经济发展的故事</p>
<a id="more"></a>
<p>《置身事内》的文风非常坦诚,作者兰小欢视野广阔、知识丰富、功底深厚,真正做到了"把复杂的事情说简单",实在是一本不可多得的好书</p>
<p>作者把第一章到第四章概括为“微观机制”部分,从小的例子、具体的制度与事件切入;第五章到第八章概括为“宏观现象”部分,从宏观经济的角度切入</p>
<h1 id="微观机制">微观机制</h1>
<h2 id="第一章-地方政府的权力与事务">第一章 地方政府的权力与事务</h2>
<ul>
<li><p>介绍央地关系、中央到地方的五级结构</p></li>
<li><p>地方具体部门的行事上同时有"条条和块块"两重领导关系</p></li>
<li><p>央地权力划分三个原则:考虑外部性和规模经济(如国防)、信息传递问题(具体事务的信息地方更清楚)、激励相容性(事权、责任、权力、财权必须匹配)</p></li>
<li><p>地方部门具有招商引资作用</p></li>
</ul>
<h2 id="第二章-财税与政府行为">第二章 财税与政府行为</h2>
<ul>
<li>介绍了94税改及其影响</li>
</ul>
<p>计划经济时代中国的财税体系是“统收统支”,到了八十年代中国经济的主旋律则是“财政包干”(交完中央的,剩下自己的)。这样的结果就是到了1994年,地方财政收入已经占比过高,中央财政收入占比过低(20%出头)</p>
<p>于是在94年分税制改革中,新出现了地税局,从而有了地税和国税两套系统(注意2018年又重新合并了)。在这次改革中,把税收分为了中央税、地税、央地共享税,从而拉高了中央税收占比。这套税改的缺点是出现了两套税收人马,人员比较冗余。</p>
<p>在94税改以前,增值税是最重要的地方税;而在94年以后,增值税成为了央地共享税。为了解决地方税收过少,<strong>中央也建立了税收返还制度(这是一种妥协制度,有两套中央向地方给税收的机制--中央转移支付和税收返还。税收返还金额相比中央转移支付数额较小</strong>,见<a href="http://yss.mof.gov.cn/2018zyys/201804/t20180403_2859259.htm" target="_blank" rel="noopener">统计链接</a></p>
<p>书中第56页有一句印象很深的金句:<strong>成功的政策背后是成功的协商和妥协,而不是机械的命令与执行,所以理解利益冲突,理解协调和解决机制,是理解政策的基础</strong></p>
<p>书中此处还讲到一个有趣的事实:企业所得税是中国第二大税种,央企税收交给中央、地方国企税收交给地方,因此地方政府有动机做大地方国企,甚至容易出现<strong>地域保护</strong>(典型如烟厂、酒厂)<del>这其实说明了为什么不同的省区烟的牌子、酒的牌子不一样、并且以省级单位划分</del>。</p>
<ul>
<li>土地财政</li>
</ul>
<p>98年发生了一件大事--单位停止福利分房,增加了对城建土地的<strong><em>需求</em></strong></p>
<p>同时新修订的《土地管理法》,锁死了农村集体土地的非农建设,限制了城建用地的<strong><em>供给</em></strong></p>
<p>商品房和房地产时代的大幕拉开了,在98年之前,地方政府也有一定的卖地收入,但是占比很低,98年之后土地财政收入占比逐年拉高。起初卖地收入并不高,后来才引入了更规范也耳熟能详的“招拍挂”制度</p>
<p>另外要注意一点,土地财政并非仅依靠卖地收入,还包括税收收入</p>
<h2 id="第三章-政府投融资与债务">第三章 政府投融资与债务</h2>
<p>除了财政收入以外(地方财政收入主要来自一般公共预算收入和政府性基金收入,后者主要以土地出让收入为主) ,政府也可以融资,融资方式包括国债、城投公司(贷款+城投债)、地方债</p>
<p>这一章作者主要介绍了城投公司的一些具体例子、融资方式以及地方债</p>
<ul>
<li>城投公司</li>
</ul>
<p><strong>地方政府依照法律不可从银行贷款,2015年新《预算法》公布之前也不允许发行债券</strong>。因此地方政府有动机设立融资平台公司</p>
<p>本章从成都文旅集团的“宽窄巷子”和苏州工业园区的开发(土地一级开发+土地二级开发)为例展开说明</p>
<p>城投公司模式由<strong>国开行发明</strong>,这也是国开行本身的作用性质所决定(政策性银行,为政策融资)。 2008年之前,城投公司主要从国开行贷款融资;2008年之后,除了国开行,还有四大行、城商行提供贷款融资</p>
<p><strong>城商行</strong>的主要资金来自哪里?来自同业融资。相对来说城商行相对风险较大(显然因为自身实力弱),存在一定风险,典型例如包商银行</p>
<ul>
<li>地方债</li>
</ul>
<p>书中没有专门区分城投债和地方债,把城投债也列为了一种“地方债”</p>
<p>简单总结城投债的<strong><em>资金来源</em></strong> 我们在生活中几乎没有感觉到过城投的融资,它如此巨量的钱是哪里融资过来的? 1.银行贷款 2.城投债。但是城投债中七八成也是由商业银行持有 城投债的资金来源特点是,资金大部分来自于各种银行(国开行、四大行、城商行) 。这也是中国大部分企业的共性,融资高度依赖银行</p>
<p>关于城投公司融资的<strong><em>规范化</em></strong>,如今也在推进,主要包括用地方债置换城投贷款和城投债(限制融资规模、降低偿债成本),剥离政府为城投公司提供隐形担保(典型例子如重庆黔江,处罚了其地财政局为城投提供担保函的事件)、城投公司国企化</p>
<h2 id="第四章-工业化中的政府角色">第四章 工业化中的政府角色</h2>
<p>本章介绍了三个故事,三个故事中政府在为企业融资服务的过程中承担了不同的角色</p>
<p>政府和银行如何给企业帮助与融资?</p>
<p>不用偿还地给--补贴;约束性地给--产业引导基金/股权投资;给点优惠--低息贷款;不给优惠--普通贷款</p>
<p>实际执行中,产业引导基金中产生了部分“名股实债”--也就是与企业约定可以以一定价格赎回基金的股权投资并支付利息。现在已经禁止</p>
<ul>
<li>京东方与政府投资</li>
</ul>
<p>合肥建投与合肥鑫城为京东方在合肥的建设投入了大量资金,这部分内容详细见P124</p>
<ul>
<li>光伏发展与政府补贴</li>
</ul>
<p>在江西尚德和江西赛维的发展过程中,政府给予了廉价土地、税收优惠、贴息贷款</p>
<ul>
<li>政府产业引导基金</li>
</ul>
<p>在2007年的《合伙企业法》和2015年的新《预算法》之后,政府引导基金逐渐发展起来</p>
<p>政府引导基金的特点</p>
<p>1.是一种"基金的基金"(母基金),这个基金作为出资方LP把钱交给一些其他的基金作为GP(其中也可以包括社会资金),来管理这部分资金</p>
<p>2.可以看作"<strong>政府VC</strong>" 典型的产业引导基金有比如大基金和深创投</p>
<ul>
<li><p>产业引导基金本质上还是招商引资的工具,因此对企业的投资往往有地域性约束</p></li>
<li><p>为什么政府要采用母基金的方式运作而不是自己找一批人做GP?因为体制内对于市场的感知与经验不如市场中的人,并且薪酬激励上有限制。因而才采用母基金方式</p></li>
</ul>
<h1 id="宏观现象">宏观现象</h1>
<h2 id="第五章-城市化与不平衡">第五章 城市化与不平衡</h2>
<p>2019年数据,<strong>城镇常住人口</strong>占中国总人口的60%,而<strong>城镇户籍人口</strong>为44%,换句话说有超过两亿人虽然常住人口没有户口。第五章内容总结了有关房价的一些宏观现象</p>
<p>房价与居民债务、不平衡与要素市场改革 主要在说明了居民债务情况(房贷问题)与居民资产情况。北上的户均资产约为800W,这些资产价格大多来自房子</p>
<p>解决办法之一则是要素市场改革(户籍改革和土地市场改革)</p>
<p>经济发展与贫富差距 这部分说明了不同地区之间的收入差别情况</p>
<h2 id="第六章-债务与风险">第六章 债务与风险</h2>
<p>高杠杆会给宏观经济带来更高的风险、使得整个经济体的偿债成本大(利息支付高)</p>
<p>目前中国的债务情况如何?</p>
<ul>
<li><p>债务负担。债务/GDP比重大约为250%,比美国稍低,处于正常水平</p></li>
<li><p>企业融资低效问题。主要是资金的使用效率低、以及部分国企使用效率低</p></li>
<li><p>影子银行的潜在增加了杠杆。<strong>影子银行是指那些执行银行功能,但是却不在银行资产负债表中的业务,典型例如银信合作(银行出售理财产品,然后将资金给信托公司,信托公司又进行信托贷款)、银证信合作业务(银行把钱委托给券商的资管计划,再让券商把钱给信托,再贷款给企业)</strong>。资金在不同的金融机构内空转几道,使得企业融资成本变得更高了</p></li>
</ul>
<p>不过,目前中国的金融业务模式大多简单,证券化程度不高,衍生品种类很少,所以还没有发展得过度复杂。</p>
<p>如何降杠杆?当然是降低新增债务和偿还已有债务、拓展直接融资渠道</p>
<h2 id="第七章-国内国际失衡">第七章 国内国际失衡</h2>
<ul>
<li><p>国内失衡,指的是低消费与产能过剩,这样的结构性失衡。前几年比较火的“供给侧结构性改革”,指就是调整产能、调整经济运行中投资的占比;实际上供给与需求是一体两面,供给侧结构性改革也可以说就是结构性改革</p></li>
<li><p>国际失衡,指的是巨大的产能对外国产品形成强竞争、挤压外国销量</p></li>
<li><p>如何解决?国内失衡需要提高消费占比,国际失衡需要依靠国内大循环</p></li>
</ul>
<h2 id="第八章-总结政府与经济发展">第八章 总结:政府与经济发展</h2>
<ul>
<li><p>地区间竞争。地方招商引资实际上存在竞争</p></li>
<li><p>政府由"生产型政府"转向"服务型政府"</p></li>
</ul>
]]></content>
<categories>
<category>阅读</category>
</categories>
<tags>
<tag>宏观经济</tag>
<tag>微观经济</tag>
</tags>
</entry>
<entry>
<title>拉普拉斯算子的疑惑</title>
<url>/2021/10/05/%E6%8B%89%E6%99%AE%E6%8B%89%E6%96%AF%E7%AE%97%E5%AD%90%E7%9A%84%E7%96%91%E6%83%91/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>国内许多工科教材在讲到有关拉普拉斯算子(<span class="math inline">\(\Delta\)</span>)与哈密顿算子(<span class="math inline">\(\nabla\)</span>)的内容时含混不清,忽略了许多重要定义,使得一些进一步的推导难以理解</p>
<p>现记录我发现的两个主要问题,并予以解答,希望可以帮助到学习国内教材时有相似疑惑的同学</p>
<a id="more"></a>
<h2 id="拉普拉斯算子作用于矢量">1. 拉普拉斯算子作用于矢量</h2>
<h3 id="课本中的定义">1.1 课本中的定义</h3>
<p>课本在介绍拉普拉斯算子时,一般会有如下定义:</p>
<blockquote>
<p>设<span class="math inline">\(\displaystyle f\)</span>为二阶可微的实函数,那么有:</p>
<p>$f = ^2f = f $</p>
</blockquote>
<p>紧接着,教材通常还会将其在直角坐标系下展开,也即</p>
<blockquote>
<p>$^2f=_{i=1}^n{} $</p>
</blockquote>
<p>同时,教科书中常常还会在这里进一步解释它的含义是: 对一实值函数求其<strong>梯度的散度</strong></p>
<h3 id="疑问">1.2 疑问</h3>
<p>但是,在许多进一步的推导中,我们又常常可以看到如下过程,例如在波动方程(<strong>亥姆霍兹方程</strong>)的推导中有如下内容</p>
<blockquote>
<p><span class="math display">\[\nabla^2 \boldsymbol E + \omega ^2\mu\epsilon\boldsymbol E =0\]</span></p>
</blockquote>
<p><strong>其中E为矢量</strong>,或者说场量</p>
<p>这就奇了棒棒锤的怪了,说好的求梯度的散度呢?<strong>对于矢量我该如何进行计算<span class="math inline">\(\nabla ^2 \boldsymbol E\)</span></strong>?</p>
<h3 id="真正的定义">1.3 真正的定义</h3>
<p>其实,对矢量进行拉普拉斯算子,其定义与标量下并不相同,在Wolfram(https://mathworld.wolfram.com/VectorLaplacian.html)中可以查找到如下定义</p>
<blockquote>
<p>Vector Laplacian A vector Laplacian can be defined for a vector <span class="math inline">\(\mathbf{A}\)</span> by <span class="math display">\[
\nabla^{2} \mathbf{A}=\nabla(\nabla \cdot \mathbf{A})-\nabla \times(\nabla \times \mathbf{A})
\]</span> where the notation <span class="math inline">\(\dot{ }\)</span> is sometimes used to distinguish the vector Laplacian from the scalar Laplacian <span class="math inline">\(\nabla^{2}\)</span> (Moon and Spencer <span class="math inline">\(1988, \mathrm{p} .3\)</span> ). In tensor notation, <span class="math inline">\(\mathbf{A}\)</span> is written <span class="math inline">\(A_{\mu}\)</span>, and the identity becomes</p>
</blockquote>
<p><span class="math display">\[
\begin{aligned}
\nabla^{2} A_{\mu} &=A_{\mu ; \lambda} ; \lambda \\
&=\left(g^{\lambda x} A_{\mu ; \lambda}\right)_{; \kappa} \\
&=g^{\lambda} \kappa_{; \kappa} A_{\mu ; \lambda}+g^{\lambda x} A_{\mu ; \lambda x}
\end{aligned}
\]</span> > A tensor Laplacian may be similarly defined. > In cylindrical coordinates, the vector Laplacian is given by</p>
<p><strong>上面的定义式,在国内教材中通常作为一个张量运算的性质给出,但是在国外的许多资料中,则是拉普拉斯算子作用于矢量时的定义</strong></p>
<p>显然,在这样的定义下,对矢量进行拉普拉斯算子运算已经<strong>失去了梯度的散度</strong>的含义。而之所以这样定义,我的理解是为了方便进一步的数学运算,例如在直角坐标系下将其展开,可以按照简单向量运算进行下去</p>
<p><span class="math display">\[\nabla^2 \boldsymbol T = \nabla^2(T_x,T_y,T_z) = (\nabla^2 T_x)\hat x + (\nabla^2 T_y)\hat y + (\nabla^2 T_z)\hat z\]</span></p>
<p>上式可以解释为: 直角系下,矢量的拉普拉斯运算相当于对矢量的各个分量分别做拉普拉斯运算,再组成一个矢量</p>
<h3 id="拉普拉斯算子在hessian矩阵中的含义">2. 拉普拉斯算子在Hessian矩阵中的含义</h3>
<h3 id="hessian矩阵的定义">2.1 Hessian矩阵的定义</h3>
<p>Hessian矩阵通常定义如下: <span class="math display">\[
\nabla^2f = \mathbf{H}=\left[\begin{array}{cccc}
\frac{\partial^{2} f}{\partial x_{1}^{2}} & \frac{\partial^{2} f}{\partial x_{1} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{1} \partial x_{n}} \\
\frac{\partial^{2} f}{\partial x_{2} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{2}^{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{2} \partial x_{n}} \\
\frac{\partial^{2} f}{\partial x_{n} \partial x_{1}} & \frac{\partial^{2} f}{\partial x_{n} \partial x_{2}} & \cdots & \frac{\partial^{2} f}{\partial x_{n}^{2}}
\end{array}\right]
\]</span></p>
<h3 id="疑问-1">2.2 疑问</h3>
<p>我们知道,如果<span class="math inline">\(\nabla^2\)</span>作用于标量时,如<span class="math inline">\(\nabla^2 \phi\)</span>,所得结果也为一<strong>标量</strong></p>
<p><span class="math inline">\(\nabla^2\)</span>作用于矢量时,如<span class="math inline">\(\nabla^2 \boldsymbol E\)</span>,所得结果为一<strong>向量</strong></p>
<p>那么在Hessian矩阵的定义中,究竟是何种逆天的力量,能够使得拉普拉斯算子作用于在f上时,却得到了一个<strong>矩阵</strong>?</p>
<h3 id="符号的混淆">2.3 符号的混淆</h3>
<p>在维基百科中,终于找到了如下解释</p>
<blockquote>
<p>Hessian matrix</p>
<p>While <span class="math inline">\(\nabla^{2}\)</span> usually represents the Laplacian, sometimes <span class="math inline">\(\nabla^{2}\)</span> also represents the Hessian matrix. The former refers to the inner product of <span class="math inline">\(\nabla\)</span>, while the latter refers to the dyadic product of <span class="math inline">\(\nabla\)</span> : <span class="math display">\[
\nabla^{2}=\nabla \cdot \nabla^{T}
\]</span> So whether <span class="math inline">\(\nabla^{2}\)</span> refers to a Laplacian or a Hessian matrix depends on the context.</p>
</blockquote>
<p>原来,在Hessian矩阵的定义中,<span class="math inline">\(\nabla^2\)</span>符号的含义与拉普拉斯算子有所区别。我们将</p>
<p><span class="math display">\[\nabla=\left[\begin{array}{l}
\frac{\partial }{\partial x_{1}} \\
\frac{\partial }{\partial x_{2}} \\
\cdots \\
\frac{\partial }{\partial x_{n}} \\
\end{array}\right]\]</span></p>
<p>经过简单的矩阵运算<span class="math inline">\(\nabla^{2}=\nabla \cdot \nabla^{T}\)</span>,即可得到Hessian的定义式</p>
<h3 id="参考资料">* 参考资料</h3>
<ul>
<li><a href="https://mathworld.wolfram.com/VectorLaplacian.html" target="_blank" rel="noopener">Vector Laplacian</a></li>
<li><a href="https://en.wikipedia.org/wiki/Del#Hessian_matrix" target="_blank" rel="noopener">Del Wiki</a></li>
</ul>
<p><img src="https://img-blog.csdnimg.cn/47f128522fa648f6b252a835848a9199.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_12,color_FFFFFF,t_70,g_se,x_16" /></p>
]]></content>
<categories>
<category>数学</category>
</categories>
<tags>
<tag>总结</tag>
<tag>最优化</tag>
<tag>拉普拉斯算子</tag>
<tag>海瑟矩阵</tag>
</tags>
</entry>
<entry>
<title>数据结构与算法笔记归档</title>
<url>/2021/02/25/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E7%AC%94%E8%AE%B0%E5%BD%92%E6%A1%A3/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>数据结构与算法笔记。代码大部分使用C++与Java两种实现</p>
</blockquote>
<a id="more"></a>
<p>我的CSDN博客中写了一些数据结构与算法题目笔记,题目均为经典算法题且大部分来自leetcode,并且大都分别使用<code>C++</code>与<code>Java</code>两种实现</p>
<p>现按题目中使用的数据结构归档如下以方便查阅,不断更新中</p>
<h3 id="数组与链表">1. 数组与链表</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113125703" target="_blank" rel="noopener">链表 : 反向打印链表</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113089896" target="_blank" rel="noopener">数组 : 找出重复元素</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113328112" target="_blank" rel="noopener">链表 : 删除特定结点</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113388316" target="_blank" rel="noopener">数组 : 调整数组顺序使奇数位于偶数之前</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113185283" target="_blank" rel="noopener">数组 : 旋转数组中的最小元素</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113404494" target="_blank" rel="noopener">链表 : 链表中的倒数第k个结点</a></li>
</ul>
<h3 id="栈与队列">2. 栈与队列</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113143160" target="_blank" rel="noopener">栈与队列 : 用两个栈实现队列</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113523886" target="_blank" rel="noopener">栈 : 包含min函数的栈</a></li>
</ul>
<h3 id="二叉树">3. 二叉树</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113447366" target="_blank" rel="noopener">二叉树 : 二叉树的镜像</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113466097" target="_blank" rel="noopener">二叉树 : 对称的二叉树</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113561673" target="_blank" rel="noopener">二叉树 : 二叉搜索树的第k大结点</a></li>
</ul>
<h3 id="动态规划">4. 动态规划</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113177772" target="_blank" rel="noopener">使用动态规划解决斐波那契数列</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113178283" target="_blank" rel="noopener">动态规划 : 青蛙跳台阶问题</a></li>
</ul>
<h3 id="堆优先队列集合">5. 堆、优先队列、集合</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113654275" target="_blank" rel="noopener">C++中的堆与优先序列</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113089896" target="_blank" rel="noopener">集合 : 寻找数组中的重复元素</a></li>
</ul>
<h3 id="位操作">6. 位操作</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113307993" target="_blank" rel="noopener">二进制中1的个数</a></li>
</ul>
<h3 id="双指针法">7. 双指针法</h3>
<ul>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113633652" target="_blank" rel="noopener">合并区间问题</a></li>
<li><a href="https://blog.csdn.net/qq_42138454/article/details/113407412" target="_blank" rel="noopener">双指针法 : 反转链表</a></li>
</ul>
]]></content>
</entry>
<entry>
<title>换季了</title>
<url>/2020/04/28/%E6%8D%A2%E5%AD%A3%E4%BA%86/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>--《夏天》 合唱</p>
</blockquote>
<div id="aplayer-eMlDPtWC" class="aplayer aplayer-tag-marker" style="margin-bottom: 20px;">
<pre class="aplayer-lrc-content"></pre>
</div>
<script>
var ap = new APlayer({
element: document.getElementById("aplayer-eMlDPtWC"),
narrow: false,
autoplay: false,
showlrc: false,
music: {
title: "夏天",
author: "金承志",
url: "http://music.163.com/song/media/outer/url?id=1302066394.mp3",
pic: "https://img-blog.csdnimg.cn/20200830142014845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70#pic_center",
lrc: ""
}
});
window.aplayers || (window.aplayers = []);
window.aplayers.push(ap);
</script>
<a id="more"></a>
<blockquote>
<p>夏天的梦</p>
<p>是什么颜色的</p>
<p>是微微踮起的脚尖</p>
<p>是海岸线上的尖叫</p>
<p>夏天的梦</p>
<p>是什么颜色的</p>
<p>是列车远去的白烟</p>
<p>是关门轻轻的背影</p>
</blockquote>
<p><img src="https://img-blog.csdnimg.cn/20200428115308761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" /></p>
]]></content>
<categories>
<category>感想</category>
</categories>
<tags>
<tag>感想</tag>
<tag>歌曲</tag>
</tags>
</entry>
<entry>
<title>文本检测(Text Detection)综述</title>
<url>/2022/03/15/%E6%96%87%E6%9C%AC%E6%A3%80%E6%B5%8B(Text%20Detection)%E7%BB%BC%E8%BF%B0/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><strong>文本检测</strong>(Text Detection)是计算机视觉领域的经典问题,该技术旨在寻求一种可靠方法作为文本识别技术的前端,是<strong>目标检测</strong>(Object Detection)领域的一个子问题</p>
<a id="more"></a>
<h1 id="检测detection在计算机视觉中的位置">检测(Detection)在计算机视觉中的位置</h1>
<p>计算机视觉有四大基本任务: <strong>分割(classification)、定位(检测localization、detection)、语义分割(Semantic segmentation)、实例分割(Instance segmentation)</strong> <img src="https://img-blog.csdnimg.cn/47416d12da4e4b1ba4f6355fa14fed3d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /></p>
<blockquote>
<p>这四个任务需要对图像的理解逐步深入。给定一张输入图像,图像<strong>分类</strong>任务旨在判断该图像所属类别。<strong>定位</strong>是在图像分类的基础上,进一步判断图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式。在<a href="https://www.zhihu.com/search?q=目标定位&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra=%7B%22sourceType%22%3A%22answer%22%2C%22sourceId%22%3A304469552%7D" target="_blank" rel="noopener">目标定位</a>中,通常只有一个或固定数目的目标,而目标<strong>检测</strong>更一般化,其图像中出现的目标种类和数目都不定。<strong>语义分割</strong>是目标检测更进阶的任务,目标检测只需要框出每个目标的包围盒,语义分割需要进一步判断图像中哪些像素属于哪个目标。但是,语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是,<strong>实例分割</strong>需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫。此外,目标<strong>跟踪</strong>通常是用于视频数据,和目标检测有密切的联系,同时要利用帧之间的时序关系。</p>
<p>作者:张皓 链接:https://www.zhihu.com/question/36500536/answer/304469552 来源:知乎</p>
</blockquote>
<figure>
<img src="https://img-blog.csdnimg.cn/31c7fa05dd1e44398bfcaae46f0b7559.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>上图中,从上到下逐渐复杂</p>
<p>复杂程度: 分割(同分类)-->定位(一个或固定数目的目标)-->检测(和定位其实很类似,也是用一个bounding box)-->语义分割(像素级的分割)-->实例分割(在前者的基础上区分出同类的不同实例)</p>
<h1 id="检测任务">检测任务</h1>
<h3 id="经典数据集">经典数据集</h3>
<p><strong>PASCAL VOC</strong> 包含20个类别。通常是用VOC07和VOC12的trainval并集作为训练,用VOC07的测试集作为测试。</p>
<p><strong>MS COCO</strong> COCO比VOC更困难。COCO包含80k训练图像、40k验证图像、和20k没有公开标记的测试图像(test-dev),80个类别,平均每张图7.2个目标。通常是用80k训练和35k验证图像的并集作为训练,其余5k图像作为验证,20k测试图像用于线上测试。<strong>区别于ImageNet常用于做分类,COCO用来做检测</strong>,因为COCO没label</p>
<h3 id="评价指标">评价指标</h3>
<p><strong>mAP (mean average precision)</strong> 目标检测中的常用评价指标,计算方法如下。当预测的包围盒和真实包围盒的交并比大于某一阈值(通常为0.5),则认为该预测正确。对每个类别,我们画出它的查准率-查全率(precision-recall)曲线,平均准确率是曲线下的面积。之后再对所有类别的平均准确率求平均,即可得到mAP,其取值为[0, 100%]。</p>
<p><strong>交并比(intersection over union, IoU)</strong> 算法预测的包围盒和真实包围盒交集的面积除以这两个包围盒并集的面积,取值为[0, 1]。交并比度量了算法预测的包围盒和真实包围盒的接近程度,交并比越大,两个包围盒的重叠程度越高。</p>
<h3 id="发展历史">发展历史</h3>
<figure>
<img src="https://img-blog.csdnimg.cn/6d076851bfb14110892816c6622fde25.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_20,color_FFFFFF,t_70,g_se,x_16" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>经典的LeNet、AlexNet、VGG、GoogleNet用来做分类,RCNN、Fast RCNN、Faster RCNN、YOLO、SSD则用来做检测</p>
<ul>
<li><p>单阶段目标检测方法是指只需一次提取特征即可实现目标检测,其速度相比多阶段的算法快,一般精度稍微低一些</p></li>
<li><p><strong>two-stage检测算法</strong>将检测问题划分为两个阶段,首先产生候选区域(region proposals),然后对候选区域分类(一般还需要对位置精修),这类算法的典型代表是基于region proposal的R-CNN系算法,如R-CNN,SPPNet ,Fast R-CNN,Faster R-CNN,FPN,R-FCN等</p></li>
</ul>
<h1 id="几个文本检测的较新方法">几个文本检测的较新方法</h1>
<h3 id="fots2018cvprfast-oriented-text-spotting-with-a-unified-network">FOTS(【2018CVPR】Fast Oriented Text Spotting with a Unified Network)</h3>
<p>这篇论文是一个<strong>集合了文本检测跟文字识别两部分的一个统一的端到端的框架,可同时对图像中的文字进行检测跟识别。</strong></p>
<p>之前的大部分方法都是将检测跟识别当做两个独立的任务去做,先检测,再识别。这篇论文提出的框架处处是可微的,所以可以对其进行端到端的训练,结果表明,<strong>该网络无需复杂的后处理和高参数整定,易于训练,并且在保证精度的前提下大大提高速度</strong></p>
<p>如下图所示</p>
<p><img src="https://img-blog.csdnimg.cn/266852210123452a8ad3b85eb69eb2ef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /> FOTS作为端到端的文本识别,使用了44.2ms; 而用某种其他方法,先检测再识别,两个步骤都分别用了四十多ms</p>
<h3 id="textsnake2018eccv-textsnake-a-flexible-representation-for-detecting-text-of-arbitrary-shapes">TextSnake(【2018ECCV】 TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes)</h3>
<figure>
<img src="https://img-blog.csdnimg.cn/3e360a42011a4ab28fb289df7768adb3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>对于一般的文本检测,往往用一个矩形框框出内容,而TextSnake采用弯曲的<strong>凸N边形</strong>框出内容并复原为矩形,这样使得文本检测更加有效</p>
<p>网络结构</p>
<figure>
<img src="https://img-blog.csdnimg.cn/409de0f4a1744634872be145c566fe93.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<h3 id="contournet2020-cvprcontournet-taking-a-further-step-toward-accurate-arbitrary-shaped-scene-text-detection">ContourNet(【2020 CVPR】ContourNet: Taking a Further Step toward Accurate Arbitrary-shaped Scene Text Detection)</h3>
<p>文章设计了文本水平与竖直方向的轮廓检测方法,对尺度(形状)变化大的文本检测任务提高了精确度</p>
<figure>
<img src="https://img-blog.csdnimg.cn/66c85a5e5fb044b3a505bfeb11e37f1b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_16,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>上半部分是用简单BoundingBox做的检测</p>
<p>下半部分用水平与竖直两方向进行检测并融合,也即文章目的</p>
<h3 id="abcnet2020-cvpr-oralabcnet-real-time-scene-text-spotting-with-adaptive-bezier-curve-network">ABCNet(【2020 CVPR Oral】ABCNet: Real-time Scene Text Spotting with Adaptive Bezier-Curve Network)</h3>
<p>Adaptive-Bezier Curve Network</p>
<p>主要部分是通过<strong>参数化的贝塞尔曲线</strong>作为线框来检测文本,提高了检测的有效性,并且速度较快,达到了实时性的要求</p>
<figure>
<img src="https://img-blog.csdnimg.cn/f46ffbfb3cf14c89b7c2995cafe9a607.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="在这里插入图片描述" /><figcaption>在这里插入图片描述</figcaption>
</figure>
<p>如上图所示,对一个弯曲形的文字,使用Bezier曲线来对齐(所谓BezierAlign),并拉成一个平的,从而有了更好的效果</p>
<h1 id="参考">参考</h1>
<ul>
<li><a href="https://www.zhihu.com/question/36500536/answer/304469552?utm_source=qq&utm_medium=social&utm_oi=602621611652943872" target="_blank" rel="noopener">计算机视觉中各任务的区别--知乎-张皓</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/31727402" target="_blank" rel="noopener">计算机视觉中的四大任务</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/367069340" target="_blank" rel="noopener">单阶段、两阶段检测</a></li>
<li><a href="https://zhuanlan.zhihu.com/p/85545272" target="_blank" rel="noopener">文本检测综述</a></li>
</ul>
]]></content>
<categories>
<category>人工智能</category>
</categories>
<tags>
<tag>综述</tag>
<tag>计算机视觉</tag>
<tag>目标检测</tag>
<tag>文本检测</tag>
</tags>
</entry>
<entry>
<title>校服与个性的表达</title>
<url>/2020/04/16/%E6%A0%A1%E6%9C%8D%E4%B8%8E%E4%B8%AA%E6%80%A7%E7%9A%84%E8%A1%A8%E8%BE%BE/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>知乎上最近有一个热门问题 <a href="https://www.zhihu.com/question/51687266/answer/1140006550" target="_blank" rel="noopener">中国校服是否扼杀了个性?</a>。不同的观点很多,其实都有一定的道理。我也有我的观点</p>
</blockquote>
<a id="more"></a>
<p>在我看来,人的个性来自于他的处事法则、来自于他的真诚与习惯,而很少来自于他的穿着</p>
<p>中学时代,我的周围有幽默感十足喜欢拿自己开涮的“谐星”,有上课时呼呼大睡下课后与我一起打闹的厕友,有喜欢安静地一个人看书听歌的女神,也有非常叛逆喜欢和别人不同的酷boy。他们都穿着一样的校服,但是他们的个性却如此地鲜明、也如此地不同</p>
<p>能通过校服扼杀的不是个性。如果一个人的个性能通过这一件校服就可以扼杀,那么不如说他其实缺乏个性。况且,中学的大家身体里满是活力与荷尔蒙,吃一顿食堂就能打一整个下午的球,喜欢的女孩一个眼神就让我浮想联翩,这样的年纪,哪能靠一件衣服就能阻碍个性的表达呢?</p>
<p><img src="https://img-blog.csdnimg.cn/20200416183802510.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" /></p>
]]></content>
<categories>
<category>感想</category>
</categories>
<tags>
<tag>知乎</tag>
</tags>
</entry>
<entry>
<title>泛函分析(2)空间完备性</title>
<url>/2021/10/13/%E6%B3%9B%E5%87%BD%E5%88%86%E6%9E%90(2)%E7%A9%BA%E9%97%B4%E5%AE%8C%E5%A4%87%E6%80%A7/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>完备性是泛函分析中的重要概念,本文对此概念进行简要总结</p>
<a id="more"></a>
<figure>
<img src="https://img-blog.csdnimg.cn/fab6fa5236774ceaa264aeaa85a24580.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_13,color_FFFFFF,t_70,g_se,x_16" alt="圆" /><figcaption>圆</figcaption>
</figure>
<h1 id="空间完备性"><strong>空间完备性</strong></h1>
<p>为了定义完备性,需要首先清楚柯西序列和收敛的概念</p>
<h2 id="收敛性与柯西列"><strong>1. 收敛性与柯西列</strong></h2>
<h3 id="柯西列"><strong>1.1 柯西列</strong></h3>
<p>给定某个度量空间 <span class="math inline">\(X\)</span> 中的序列 <span class="math inline">\(\left\{x_{i}\right\}\)</span>, 当满足以下条件时,他就叫做柯西序列 (Cauchy sequence)</p>
<p>对任意 <span class="math inline">\(\varepsilon>0\)</span>, 存在 <span class="math inline">\(N\)</span> ,当 <span class="math inline">\(m, n \geqslant N\)</span> 时就满足 <span class="math inline">\(d\left(u_{m}, u_{n}\right)<\varepsilon\)</span>.</p>
<p><strong>1.2 收敛</strong></p>
<p>设 <span class="math inline">\((X, d)\)</span> 为度量空间, <span class="math inline">\(\left\{x_{n}\right\}\)</span> 为 <span class="math inline">\(\mathrm{X}\)</span> 中的数列,若存在 <span class="math inline">\(x \in X\)</span> 使得 <span class="math inline">\(\lim _{n \rightarrow \infty} d\left(x_{n}, x\right)=0\)</span> ,则 <span class="math inline">\(\left\{x_{n}\right\}\)</span> 在 <span class="math inline">\(X\)</span> 中收敛, 称 <span class="math inline">\(\left\{x_{n}\right\}\)</span> 为收敛列, 称 <span class="math inline">\(x\)</span> 为 <span class="math inline">\(\left\{x_{n}\right\}\)</span> 的极限, 记做 <span class="math inline">\(x_{n} \rightarrow x\)</span> 。</p>
<p><span class="math inline">\(Remark:\)</span></p>
<ol type="1">
<li><p>收敛列比柯西列更严格。或者说收敛列一定是柯西列</p></li>
<li><p>柯西列的直观理解是,一个序列的元素随着序数的增加而愈发靠近,并且最终趋于无限近</p></li>
<li><p>收敛列一定有界,不仅如此,柯西列也一定有界</p></li>
</ol>
<h2 id="完备空间概念"><strong>2. 完备空间概念</strong></h2>
<p>完备空间指这样性质的空间: 空间中的任何柯西序列都收敛于这个空间中</p>
<p><span class="math inline">\(Remark:\)</span></p>
<ol type="1">
<li><p>完备空间是特殊的度量空间。因为按照定义完备空间需要"柯西列收敛",而为了定义收敛,需要先定义先度量</p></li>
<li><p><strong>欧几里得空间是完备空间</strong>。这给了它很好的性质,也即柯西列的收敛性</p></li>
</ol>
<p>证明如下:</p>
<p>Let <span class="math inline">\(\left\langle\left(x_{n, 1}, x_{n, 2}, \ldots, x_{n, m}\right)\right\rangle_{n \in \mathbb{N}}\)</span> be a Cauchy sequence in <span class="math inline">\(\mathbb{R}^{m}\)</span>.</p>
<p>Let <span class="math inline">\(\epsilon>0\)</span></p>
<p>Then <span class="math inline">\(\frac{\epsilon}{m}>0\)</span>.</p>
<p>We have that Real Number Line is Complete Metric Space.</p>
<p>Therefore:</p>
<p><span class="math inline">\(\exists y_{1}, y_{2}, \ldots, y_{m} \in \mathbb{R}\)</span> and <span class="math inline">\(N_{1}, N_{2}, \ldots, N_{m} \in \mathbb{N}\)</span> (depending on <span class="math inline">\(\epsilon\)</span> ) such that:</p>
<p><span class="math display">\[
\forall k \in \mathbb{N}: 1 \leq k \leq m: \forall n_{k}>N_{k}:\left\langle x_{n, k}-y_{k}\right\rangle<\frac{\epsilon}{m}
\]</span></p>
<p>From Euclidean Space is Normed Space:</p>
<p><span class="math display">\[
\left\|\left(x_{n, 1}, x_{n, 2}, \ldots, x_{n, m}\right)-\left(y_{1}, y_{2}, \ldots, y_{m}\right)\right\| \leq \sum_{k=1}^{m}\left|x_{n, k}-y_{k}\right|<\epsilon
\]</span></p>
<p>Hence the Euclidean space is a complete metric space.</p>
<ol start="3" type="1">
<li><p>数集<span class="math inline">\(\mathbb{R}\)</span>、<span class="math inline">\(\mathbb{C}\)</span>都是完备的</p></li>
<li><p>R和C的子集不一定完备。例如取<span class="math inline">\(X=(0,1)\)</span>。取一柯西列(元素可以无限靠近)<span class="math inline">\(x=1/n\)</span>,其极限0不在该空间中</p></li>
<li><p>完备度量空间一定为闭集(结合上面例子记忆)</p></li>
<li><p>完备度量空间的闭子集仍然完备</p></li>
<li><p>“完备” 可以形象理解为空间中没有 “漏洞”.有限维空间都是完备的.可数维空间都是不完备的.例如有理数集和多项式组成的空间就是不完备的(柯西序列的极限可以是 e^x,但是 e^x并不属于该空间)</p></li>
</ol>
<h3 id="参考">参考</h3>
<ul>
<li><p><a href="https://zhuanlan.zhihu.com/p/85867887" target="_blank" rel="noopener">收敛性、完备性和紧性</a></p></li>
<li><p><a href="https://proofwiki.org/wiki/Euclidean_Space_is_Complete_Metric_Space" target="_blank" rel="noopener">Euclidean Space is Complete Metric Space</a></p></li>
</ul>
]]></content>
<categories>
<category>数学</category>
</categories>
<tags>
<tag>总结</tag>
<tag>泛函分析</tag>
<tag>完备空间</tag>
<tag>柯西序列</tag>
</tags>
</entry>
<entry>
<title>正则化笔记</title>
<url>/2020/04/13/%E6%AD%A3%E5%88%99%E5%8C%96%E7%AC%94%E8%AE%B0/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="一.为什么需要正则化">一.为什么需要正则化?</h2>
<p>简单来说,在使用神经网络时,为了增加模型的泛化能力,防止模型只在训练集上有效、在测试集上不够有效,我们使用正则化</p>
<blockquote>
<p>正则化是为了防止过拟合, 进而增强泛化能力。泛化误差= 测试误差。也可以说是为了使得训练数据训练的模型在测试集上的表现(或说性能)好不好</p>
</blockquote>
<a id="more"></a>
<h2 id="二.正则化有哪几种常用方法">二.正则化有哪几种常用方法?</h2>
<p>常用的有<span class="math inline">\(l_1-norm\)</span>、<span class="math inline">\(l_2-norm\)</span>即在损失函数中添加<strong>惩罚项</strong>;还有例如<span class="math inline">\(Droupout\)</span>方法。下面让我们来更仔细地看一下是怎么进行的</p>
<h3 id="l_1-norm">2.1 <span class="math inline">\(l_1-norm\)</span></h3>
<p><span class="math inline">\(l_1-norm\)</span>也叫做<code>lasso回归</code>。 机器学习模型当中的参数,可形式化地组成参数向量,记为<span class="math inline">\(\vec w\)</span>,为方便表示,我下面都记为大写字母W。不失一般性,以线性模型为例,模型可记为 <span class="math display">\[F(x;W)=W^Tx=\sum_{i=1}^nw_i\cdot x\]</span> 为了进一步地偷懒,我们将<span class="math inline">\(W^T\)</span>也叫做<span class="math inline">\(W\)</span>。 现在我们来定义一个平方损失函数,其中W是模型的参数矩阵,x为模型的某个输入值,y为实际值,那么有损失函数 <span class="math display">\[C=||Wx-y||^2\]</span> 所以有模型参数 <span class="math display">\[W^*=arg\min_{C}||Wx-y||^2\]</span> 试想,假如我们使用某种方法使得cost降到最小,那么可想而知很容易便会产生过拟合(overfitting)。现在我们不希望这个cost降到最低,一个可行的方法是在损失函数公式中我们给它加入一个反向的<code>干扰项</code>,我们给它取个更专业的名字--<code>惩罚项</code>。 我们重新定义这个这个损失函数。<span class="math inline">\(l_1-norm\)</span>方法在式子中加入了一个<code>一次</code>的惩罚项,<code>用来描述模型的复杂程度</code> <span class="math display">\[C=||Wx-y||^2+\alpha||W||\]</span> 其中<span class="math inline">\(\alpha\)</span>用来衡量惩罚项的重要程度。 使用这样的损失函数,便可以一定程度上防止产生过拟合</p>
<h3 id="l_2-norm">2.2 <span class="math inline">\(l_2-norm\)</span></h3>
<p>将惩罚项定位二次项,这样定义损失函数的方法我们称之为<span class="math inline">\(l_2-norm\)</span>,也可以叫它Ridge回归(岭回归)。例如: <span class="math display">\[C=||Wx-y||^2+\alpha||W||^2\]</span></p>
<h3 id="dropout正则化">2.3 Dropout正则化</h3>
<p>L1、L2正则化是通过修改损失函数来实现的,而Dropout则是通过<strong>修改神经网络本身</strong>来实现的,它是在训练网络时用的一种技巧(trick)。 举例来说,假如现在我们有20个样本,但是定义了300个神经元,那么直接进行训练,由于神经元数量很多,所以模型的拟合效果会很好,也因此会很容易产生过拟合现象。现在我们每一次训练神经网络时,随机丢弃一部分神经元,下一次训练时,再随机丢掉一部分神经元,那么这样我们也可以有效降低过拟合效应。 下面是一个示例代码,来自莫烦py教程 <figure class="highlight py"><table><tr><td class="code"><pre><span class="line"><span class="keyword">import</span> torch</span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line"></span><br><span class="line"><span class="comment"># torch.manual_seed(1) # reproducible</span></span><br><span class="line"></span><br><span class="line">N_SAMPLES = <span class="number">20</span></span><br><span class="line">N_HIDDEN = <span class="number">300</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># training data</span></span><br><span class="line">x = torch.unsqueeze(torch.linspace(<span class="number">-1</span>, <span class="number">1</span>, N_SAMPLES), <span class="number">1</span>)</span><br><span class="line">y = x + <span class="number">0.3</span>*torch.normal(torch.zeros(N_SAMPLES, <span class="number">1</span>), torch.ones(N_SAMPLES, <span class="number">1</span>))</span><br><span class="line"></span><br><span class="line"><span class="comment"># test data</span></span><br><span class="line">test_x = torch.unsqueeze(torch.linspace(<span class="number">-1</span>, <span class="number">1</span>, N_SAMPLES), <span class="number">1</span>)</span><br><span class="line">test_y = test_x + <span class="number">0.3</span>*torch.normal(torch.zeros(N_SAMPLES, <span class="number">1</span>), torch.ones(N_SAMPLES, <span class="number">1</span>))</span><br><span class="line"></span><br><span class="line"><span class="comment"># show data</span></span><br><span class="line">plt.scatter(x.data.numpy(), y.data.numpy(), c=<span class="string">'magenta'</span>, s=<span class="number">50</span>, alpha=<span class="number">0.5</span>, label=<span class="string">'train'</span>)</span><br><span class="line">plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c=<span class="string">'cyan'</span>, s=<span class="number">50</span>, alpha=<span class="number">0.5</span>, label=<span class="string">'test'</span>)</span><br><span class="line">plt.legend(loc=<span class="string">'upper left'</span>)</span><br><span class="line">plt.ylim((<span class="number">-2.5</span>, <span class="number">2.5</span>))</span><br><span class="line">plt.show()</span><br><span class="line"></span><br><span class="line">net_overfitting = torch.nn.Sequential(</span><br><span class="line"> torch.nn.Linear(<span class="number">1</span>, N_HIDDEN),</span><br><span class="line"> torch.nn.ReLU(),</span><br><span class="line"> torch.nn.Linear(N_HIDDEN, N_HIDDEN),</span><br><span class="line"> torch.nn.ReLU(),</span><br><span class="line"> torch.nn.Linear(N_HIDDEN, <span class="number">1</span>),</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">net_dropped = torch.nn.Sequential(</span><br><span class="line"> torch.nn.Linear(<span class="number">1</span>, N_HIDDEN),</span><br><span class="line"> torch.nn.Dropout(<span class="number">0.5</span>), <span class="comment"># drop 50% of the neuron</span></span><br><span class="line"> torch.nn.ReLU(),</span><br><span class="line"> torch.nn.Linear(N_HIDDEN, N_HIDDEN),</span><br><span class="line"> torch.nn.Dropout(<span class="number">0.5</span>), <span class="comment"># drop 50% of the neuron</span></span><br><span class="line"> torch.nn.ReLU(),</span><br><span class="line"> torch.nn.Linear(N_HIDDEN, <span class="number">1</span>),</span><br><span class="line">)</span><br><span class="line"></span><br><span class="line">print(net_overfitting) <span class="comment"># net architecture</span></span><br><span class="line">print(net_dropped)</span><br><span class="line"></span><br><span class="line">optimizer_ofit = torch.optim.Adam(net_overfitting.parameters(), lr=<span class="number">0.01</span>)</span><br><span class="line">optimizer_drop = torch.optim.Adam(net_dropped.parameters(), lr=<span class="number">0.01</span>)</span><br><span class="line">loss_func = torch.nn.MSELoss()</span><br><span class="line"></span><br><span class="line">plt.ion() <span class="comment"># something about plotting</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> t <span class="keyword">in</span> range(<span class="number">500</span>):</span><br><span class="line"> pred_ofit = net_overfitting(x)</span><br><span class="line"> pred_drop = net_dropped(x)</span><br><span class="line"> loss_ofit = loss_func(pred_ofit, y)</span><br><span class="line"> loss_drop = loss_func(pred_drop, y)</span><br><span class="line"></span><br><span class="line"> optimizer_ofit.zero_grad()</span><br><span class="line"> optimizer_drop.zero_grad() <span class="comment"># 清空过往梯度,才能更顺利地进行再一次地计算梯度</span></span><br><span class="line"> loss_ofit.backward()</span><br><span class="line"> loss_drop.backward() <span class="comment"># backward通过反向传播计算当前梯度</span></span><br><span class="line"> optimizer_ofit.step() <span class="comment"># step才更新网络参数</span></span><br><span class="line"> optimizer_drop.step()</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> t % <span class="number">10</span> == <span class="number">0</span>:</span><br><span class="line"> <span class="comment"># change to eval mode in order to fix drop out effect</span></span><br><span class="line"> net_overfitting.eval()</span><br><span class="line"> net_dropped.eval() <span class="comment"># parameters for dropout differ from train mode</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># plotting</span></span><br><span class="line"> plt.cla()</span><br><span class="line"> test_pred_ofit = net_overfitting(test_x)</span><br><span class="line"> test_pred_drop = net_dropped(test_x)</span><br><span class="line"> plt.scatter(x.data.numpy(), y.data.numpy(), c=<span class="string">'magenta'</span>, s=<span class="number">50</span>, alpha=<span class="number">0.3</span>, label=<span class="string">'train'</span>)</span><br><span class="line"> plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c=<span class="string">'cyan'</span>, s=<span class="number">50</span>, alpha=<span class="number">0.3</span>, label=<span class="string">'test'</span>)</span><br><span class="line"> plt.plot(test_x.data.numpy(), test_pred_ofit.data.numpy(), <span class="string">'r-'</span>, lw=<span class="number">3</span>, label=<span class="string">'overfitting'</span>)</span><br><span class="line"> plt.plot(test_x.data.numpy(), test_pred_drop.data.numpy(), <span class="string">'b--'</span>, lw=<span class="number">3</span>, label=<span class="string">'dropout(50%)'</span>)</span><br><span class="line"> plt.text(<span class="number">0</span>, <span class="number">-1.2</span>, <span class="string">'overfitting loss=%.4f'</span> % loss_func(test_pred_ofit, test_y).data.numpy(), fontdict={<span class="string">'size'</span>: <span class="number">20</span>, <span class="string">'color'</span>: <span class="string">'red'</span>})</span><br><span class="line"> plt.text(<span class="number">0</span>, <span class="number">-1.5</span>, <span class="string">'dropout loss=%.4f'</span> % loss_func(test_pred_drop, test_y).data.numpy(), fontdict={<span class="string">'size'</span>: <span class="number">20</span>, <span class="string">'color'</span>: <span class="string">'blue'</span>})</span><br><span class="line"> plt.legend(loc=<span class="string">'upper left'</span>); plt.ylim((<span class="number">-2.5</span>, <span class="number">2.5</span>));plt.pause(<span class="number">0.1</span>)</span><br><span class="line"></span><br><span class="line"> <span class="comment"># change back to train mode</span></span><br><span class="line"> net_overfitting.train()</span><br><span class="line"> net_dropped.train()</span><br><span class="line"></span><br><span class="line">plt.ioff()</span><br><span class="line">plt.show()</span><br></pre></td></tr></table></figure> 结果: <img src="https://img-blog.csdnimg.cn/20200407134135992.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述" /> 可以看到进行所谓dropout后的网络在所有数据上的损失函数更小</p>
<p>总结一下我们应该怎么使用这种dropout技巧: 1. 定义网络时,在隐藏层中间使用<code>torch.nn.Dropout(prop)</code> 2. 神经网络有eval()和train()两种模式。计算预测值时记得切换到eval()模式,这种模式会关闭dropout;而在train()模式下,使用模型进行预测时仍然有部分神经元被dropout ### 2.4 增加训练集样本数量 这种方法自然也是可以削减过拟合的</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://blog.csdn.net/qq_20412595/article/details/81636105?depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-1" target="_blank" rel="noopener">正则化理解</a></li>
<li><a href="https://blog.csdn.net/jinping_shi/article/details/52433975" target="_blank" rel="noopener">L1与L2正则化</a></li>
<li><a href="https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg" target="_blank" rel="noopener">莫烦python</a></li>
</ul>
]]></content>
<categories>
<category>机器学习</category>
</categories>
<tags>
<tag>总结</tag>
<tag>回归</tag>
</tags>
</entry>
<entry>
<title>泛函分析(1)度量空间</title>
<url>/2021/10/13/%E6%B3%9B%E5%87%BD%E5%88%86%E6%9E%90(1)%E5%BA%A6%E9%87%8F%E7%A9%BA%E9%97%B4/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>度量空间与线性空间是两种基本的空间,本文对度量空间进行简要总结</p>
<a id="more"></a>
<figure>
<img src="https://img-blog.csdnimg.cn/cfd9cb4c538a463cafe54244d43e5c1b.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="圆焰" /><figcaption>圆焰</figcaption>
</figure>
<h3 id="符号">符号</h3>
<p><span class="math inline">\(\mathbb{K}\)</span>表示实数集<span class="math inline">\(\mathbb{R}\)</span>或者复数集<span class="math inline">\(\mathbb{C}\)</span></p>
<h2 id="定义">1. 定义</h2>
<p>称度量空间<span class="math inline">\((X,d)\)</span>包括集合<span class="math inline">\(X\)</span>和一度量<span class="math inline">\(d:X\times X \rightarrow \mathbb{R}\)</span>, 同时度量满足以下四个性质</p>
<ul>
<li>非负性: <span class="math inline">\(\forall x, y \in X, d(x, y) \geq 0\)</span></li>
<li>非退化性: <span class="math inline">\(x, y \in X, d(x, y)=0 \Leftrightarrow x=y\)</span></li>
<li>对称性: <span class="math inline">\(\forall x, y \in X, d(x, y)=d(y, x)\)</span></li>
<li>三角不等式: <span class="math inline">\(\forall x, y, z \in X, d(x, y) \leq d(x, z)+d(z, y)\)</span></li>
</ul>
<p>度量空间是一类基本空间,在度量空间中定义了度量,或者称距离</p>
<blockquote>
<p><span class="math inline">\(\text { Remark: 注意到 }\{\infty\} \notin \mathbb{R} \text { ,即还有一个隐含的要求, 距离必须是有限的。 }\)</span></p>
</blockquote>
<h2 id="例子">2. 例子</h2>
<h3 id="一维数集与自然距离构成度量空间">2.1 一维数集与自然距离构成度量空间</h3>
<p>一维数集上的自然距离是度量,<span class="math inline">\((X,d)\)</span>为一度量空间</p>
<p><span class="math inline">\(X=A \subset \mathbb{K}, d(x, y)=|x-y|, \forall x, y \in X\)</span></p>
<h3 id="离散集合与示性函数构成度量空间">2.2 离散集合与示性函数构成度量空间</h3>
<p><span class="math inline">\(X\)</span> 为离散集合, <span class="math inline">\(d(x, y)=\mathbb{I}[x \neq y]\)</span>, 其中 <span class="math inline">\(\mathbb{I}[\)</span> cond <span class="math inline">\(]\)</span> 为指示函数, 条件为真时取 1 , 否则 取 0 。</p>
<p>证明它是度量空间: 前三条容易证明,三角不等式可以用分类讨论证明。先考虑 <span class="math inline">\(x=y ,\)</span> 再考虑 <span class="math inline">\(x \neq y\)</span> 。后一种情况再分为 <span class="math inline">\(x=z \neq y, x \neq z=y, x \neq z \neq y\)</span> 三种情况说明。</p>
<h3 id="序列空间lp与其lp-norm构成度量空间">2.3 序列空间Lp与其Lp-norm构成度量空间</h3>
<blockquote>
<p>范数不是为向量定义的吗。序列空间Lp也是向量吗?希望有数学系的小伙伴予以解答</p>
</blockquote>
<p><span class="math inline">\(l^{p}:=\left\{\left\{x_{n}\right\}: \sum_{n=1}^{\infty}\left|x_{n}\right|^{p}<\infty\right\}, 1 \leq p<\infty\)</span></p>
<p><span class="math inline">\(X=l^{p}, \quad d_{p}(x, y)=\left(\sum_{n=1}^{\infty}\left|x_{n}-y_{n}\right|^{p}\right)^{1 / p}\)</span></p>
<h3 id="几何向量与其无穷p范数构成度量空间">2.4 几何向量与其无穷p范数构成度量空间</h3>
<p>对于向量空间 <span class="math inline">\(X=A \subset \mathbb{K}^{n} , d_{p}(x, y)=\left(\sum_{i \in[n]}\left|x_{i}-y_{i}\right|^{p}\right)^{1 / p}\)</span> 为其度量, 其中 <span class="math inline">\(p \in[1,+\infty)\)</span></p>
<p>对于向量空间 <span class="math inline">\(X=A \subset \mathbb{K}^{n}, d_{\infty}(x, y)=\max _{i \in[n]}\left|x_{i}-y_{i}\right|\)</span> 为其度量, 它是前述度量中 <span class="math inline">\(p \rightarrow \infty\)</span> 的极限情形。</p>
]]></content>
<categories>
<category>数学</category>
</categories>
<tags>
<tag>总结</tag>
<tag>泛函分析</tag>
<tag>度量空间</tag>
</tags>
</entry>
<entry>
<title>抽象代数基本概念总结</title>
<url>/2021/10/25/%E6%8A%BD%E8%B1%A1%E4%BB%A3%E6%95%B0%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5%E6%80%BB%E7%BB%93/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>电信类专业的一门重要课程是随机过程,这门课的概率论以实变函数、测度论为基础,而学习测度论的过程中无可避免地会遇到一些抽象代数的概念,本文对相关概念进行简单总结</p>
<a id="more"></a>
<p><img src="https://img-blog.csdnimg.cn/fbc4c32fae144638a524e393c56a3a5e.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_19,color_FFFFFF,t_70,g_se,x_16#pic_center" /></p>
<blockquote>
<p>终极总结: 群是一些有基本对称性的东西,域是一些像实数复数的东西,环是一些像多项式、矩阵的东西</p>
</blockquote>
<h2 id="群">群</h2>
<p>在数学中,<strong>群</strong>(group)是由一种集合以及一个二元运算所组成的代数结构,并且符合“群公理”。群公理包含下述四个性质,分别是封闭性、结合律、单位元和对于集合中所有元素存在逆元素。<strong>群是一些有对称性的东西</strong></p>
<h3 id="定义">定义</h3>
<p>群<span class="math inline">\((G,\cdot)\)</span>是由集合<em>G</em>和二元运算"·"构成的,<span class="math inline">\(\cdot为二元运算: M \times M \rightarrow M\)</span>。符合以下四个性质(称“群公理”)的数学结构。其中,二元运算结合任何两个元素<em>a</em>和<em>b</em>而形成另一个元素,记为<em>a</em>·<em>b</em>,符号"·"是具体的运算,比如整数加法。</p>
<p>四个群公理为:</p>
<ol type="1">
<li>封闭性。<span class="math inline">\(a\cdot b\)</span>仍然在集合G中</li>
<li>结合律。<span class="math inline">\((a \cdot b)\cdot c= a \cdot (b \cdot c)\)</span></li>
<li>单位元。存在<em>G</em>中的一个元素<em>e</em>,使得对于所有<em>G</em>中的元素<em>a</em>,总有等式<em>e</em>·<em>a</em> = <em>a</em>·<em>e</em> = <em>a</em> 成立。</li>
<li>逆元。对于每个<em>G</em>中的<em>a</em>,存在<em>G</em>中的一个元素<em>b</em>使得总有<em>a</em>·<em>b</em> = <em>b</em>·<em>a</em> = <em>e</em>,此处<em>e</em>为单位元。</li>
</ol>
<p><span class="math inline">\(Remark:\)</span></p>
<ul>
<li>封闭性非常自然,不用多讨论。2、3、4三点结合起来<strong>保证群有一种很基本的对称性</strong>。例如整数加法群,群公理2要求(a+b)+c=a+(b+c)(<strong>运算次序对结果无影响</strong>,是代数结构的基本对称性),群公理三要求有单位元数字0(<strong>对称的中心点</strong>),群公理4保证了这个整数群<strong>正负对称</strong></li>
<li>群的四公理不要求二元运算有交换性。如果这个二元运算还有交换性,即a*b=b*a,称这个群为交换群(或Abel群),这个群有更强的对称性;否则称为非交换群</li>
<li>群四公理是有顺序的。仅满足1为原群,再加上2为半群,再加上3为幺半群(幺的意思就是1,含有单位元),再加上4称为群。如果还加上交换性,也就是阿贝尔群</li>
</ul>
<h2 id="域">域</h2>
<p>域是一些<strong>像实数复数</strong>以及定义在上面的<strong>像加法、乘法</strong>的东西。更严格来说,有如下规定</p>
<p>域由集合F以及定义在上面的两种二元运算代数结构构成,即<span class="math inline">\((F,+,*)\)</span>,它满足如下<strong>八条公理</strong>(线性空间也是八条公理,这八个公理很像)。对 <span class="math inline">\(\forall a, b, c \in F\)</span></p>
<ol type="1">
<li>对加法和乘法都封闭</li>
<li>加法和乘法都分别符合结合律</li>
</ol>
<p><span class="math inline">\(\forall a, b, c \in F,(a+b)+c=a+(b+c),(a * b) * c=a *(b * c)\)</span></p>
<ol start="3" type="1">
<li>加法和乘法都分别符合交换律</li>
</ol>
<p><span class="math inline">\(\forall a, b \in F, a+b=b+a, a * b=b * a\)</span></p>
<ol start="4" type="1">
<li>乘法对加法有分配律</li>
</ol>
<p><span class="math inline">\(\forall a, b \in F, a+b=b+a, a * b=b * a\)</span></p>
<ol start="5" type="1">
<li>存在加法单位</li>
</ol>
<p>在F中有元素 0 , 使得 <span class="math inline">\(\forall a \in F, a+0=a\)</span></p>
<ol start="6" type="1">
<li>存在乘法单位,且这个单位不同于加法单位0</li>
</ol>
<p>在F中有不同于O的元素 1 ,使得 <span class="math inline">\(\forall a \in F, a * 1=a\)</span></p>
<ol start="7" type="1">
<li>存在加法逆元</li>
</ol>
<p><span class="math inline">\(\forall a \in F, \exists-a\)</span> 使得 <span class="math inline">\(a+(-a)=0\)</span></p>
<ol start="8" type="1">
<li>非0元素存在乘法逆元</li>
</ol>
<p><span class="math inline">\(\forall a \in F, a \neq 0, \exists a^{-1}\)</span> 使得 <span class="math inline">\(a * a^{-1}=1\)</span></p>
<p><span class="math inline">\(Remark:\)</span></p>
<ul>
<li>上面的八条公理看起来很乱,实际是为了定义这样的性质: <span class="math inline">\((F,+,*)\)</span>中的<span class="math inline">\((F,+)\)</span>是一个交换群(+运算有强对称性);<span class="math inline">\((F,*)\)</span>也是一个交换群(*运算有强对称性); 并且*运算对+运算构成分配律(两种运算之间也有关系,且不对等)。反过来,如果(F,+)与(F,*)都是交换群,且*对+有分配律,那么他们合起来构成域(F,+,*)</li>
<li>“元素0不同于元素1”的要求排除了平凡的只由一个元素组成的域</li>
<li>域是一个乘法可逆且乘法可交换的环。换句话说域在环的基础上增加了除法。实际上,域的另一个定义是: 域是交换性除环</li>
</ul>
<h2 id="环">环</h2>
<p>环比域更宽泛,域是特殊的环。在上面域的讨论中,8条公理保证(F,+)和(F,*)都是交换群,且*对+有分配律。而环不要求(F,*)是交换群,仅要求为半群。环的严格定义如下:</p>
<p>集合 <span class="math inline">\(R\)</span> 和定义于其上的二元运算 <span class="math inline">\(+\)</span> 和·构成的三元组, <span class="math inline">\((R,+, \cdot)\)</span> 构成一个环,若它们满足:</p>
<ol type="1">
<li><span class="math inline">\((R,+)\)</span> 形成一个交换群, 其单位元称为零元, 记作 0 ,即:</li>
</ol>
<ul>
<li><span class="math inline">\((R,+)\)</span> 是封闭的</li>
<li><span class="math inline">\((a+b)=(b+a)\)</span></li>
<li><span class="math inline">\((a+b)+c=a+(b+c)\)</span></li>
<li><span class="math inline">\(0+a=a+0=a\)</span></li>
<li><span class="math inline">\(\forall a \in R, \exists(-a)\)</span> 满足 <span class="math inline">\(a+(-a)=(-a)+a=0,-a\)</span> 称为 <span class="math inline">\(a\)</span> 的加法逆元</li>
</ul>
<ol start="2" type="1">
<li><span class="math inline">\((R, \cdot)\)</span> 形成一个半群,即:</li>
</ol>
<ul>
<li><span class="math inline">\((R, \cdot)\)</span> 是封闭的</li>
<li><span class="math inline">\((a \cdot b) \cdot c=a \cdot(b \cdot c)\)</span></li>
</ul>
<ol start="3" type="1">
<li>乘法关于加法满足分配律,即(左分配和右分配):</li>
</ol>
<ul>
<li><span class="math inline">\(a \cdot(b+c)=(a \cdot b)+(a \cdot c)\)</span></li>
<li><span class="math inline">\((a+b) \cdot c=(a \cdot c)+(b \cdot c)\)</span></li>
</ul>
<p><span class="math inline">\(Remark:\)</span></p>
<ul>
<li>一个环上的*运算如果满足*可逆且*可交换,那么构成一个域</li>
<li>如果*可交换,称为交换环</li>
<li>若环R是么环,且R\{0}对R上的乘法形成一个群,即: <span class="math inline">\(\forall a \in R \backslash\{0\}, \exists a^{-1} \in R \backslash\{0\}\)</span>, 使得 <span class="math inline">\(a^{-1} \cdot a=a \cdot a^{-1}=1\)</span> 。则R称为除环。类似于把*运算理解成数域中的除法,显然除法也有对称性</li>
</ul>
<figure>
<img src="https://img-blog.csdnimg.cn/1092d66b15c24d10b8dd48e16307bb27.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5q2k5pa55a6255qE56m66IW5,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center" alt="群环域" /><figcaption>群环域</figcaption>
</figure>
<h2 id="向量空间">向量空间</h2>
<p>向量空间与域都有八个公理,而且他们有一些相似性,这两者也可以进行对比,引用下知乎上Yuhang Liu的观点</p>
<blockquote>
<p>线性空间是一个加法群再配上一个域的数乘运算。它跟环最明显的区别是它上面没有乘法(数乘不是乘法),仅仅依靠线性空间的结构你不能把两个向量相乘。当然,线性空间上可以继续扩展结构,定义一种“有乘法的线性空间”,也就是 代数(是,代数 本身是一种代数结构,我不知道当时为什么人们要把它命名为代数。。),比如说 矩阵代数,它上面有加法,有数乘,还有自然的矩阵乘法。不严格地讲,代数就是一个既是线性空间又是环的东西(有人会把线性空间的条件放宽到模,但是很多文献里面讨论代数一般还是假定基底是一个域的)。</p>
<p>环就是一个既有加法也有乘法的东西,且加法和乘法之间满足一些相容性条件。域是一个乘法可逆且乘法可交换的环。</p>
<p>链接:https://www.zhihu.com/question/61294717/answer/186162348</p>
</blockquote>
<p>向量空间定义如下:</p>
<p>给定域<em>F</em>,<em>F</em>上的向量空间<em>V</em>是一个集合,其上定义了两种二元运算:</p>
<ul>
<li><strong>向量加法</strong> + : <em>V</em> + <em>V</em> → <em>V</em>,把<em>V</em>中的两个元素 <strong>u</strong> 和 <strong>v</strong> 映射到<em>V</em>中另一个元素,记作 <strong>u + v</strong>;</li>
<li><strong>标量乘法</strong> · : <em>F</em> × <em>V</em> → <em>V</em>,把<em>F</em>中的一个元素 <em>a</em> 和 <em>V</em> 中的一个元素<strong>u</strong>变为<em>V</em>中的另一个元素,记作 <em>a</em> <strong>·u</strong>。</li>
</ul>
<p><em>V</em>中的元素称为向量,相对地,<em>F</em>中的元素称为标量。</p>
<p>向量+与数乘* 满足8条公理,此处不赘述。其中前四个公理说明装备了向量加法的<em>V</em>是交换群,余下的四个公理应用于标量乘法。需要注意的是向量之间的加法“<strong>+</strong>”和标量之间的加法“+”是不一样的,标量与向量之间的标量乘法<strong>·</strong>和两个标量之间的乘法(域<em>F</em>中自带的乘法)也是不一样的。</p>
<h2 id="模">模</h2>
<p>模(module)是对向量空间的推广,将标量需为域(向量空间)推广到任意环(模)。维基百科module部分原文如下:</p>
<blockquote>
<p>A module over a ring is a generalization of the notion of vector space over a field, wherein the corresponding scalars are the elements of an arbitrary ring.</p>
</blockquote>
<p>向量空间是F-模</p>
<h2 id="参考">参考</h2>
<ul>
<li><a href="https://zh.wikipedia.org/wiki/%E5%90%91%E9%87%8F%E7%A9%BA%E9%97%B4" target="_blank" rel="noopener">wiki-向量空间</a></li>
<li><a href="https://zh.wikipedia.org/wiki/%E5%9F%9F_(%E6%95%B8%E5%AD%B8)" target="_blank" rel="noopener">wiki-域</a></li>
<li><a href="https://zh.wikipedia.org/wiki/%E7%BE%A4" target="_blank" rel="noopener">wiki-群</a></li>
<li><a href="https://zh.wikipedia.org/wiki/%E7%8E%AF_(%E4%BB%A3%E6%95%B0)" target="_blank" rel="noopener">wiki-环</a></li>
<li><a href="https://zh.wikipedia.org/wiki/%E6%A8%A1" target="_blank" rel="noopener">wiki-模</a></li>
<li><a href="https://www.zhihu.com/question/61294717/answer/186162348" target="_blank" rel="noopener">向量空间与域</a></li>
</ul>
]]></content>
<categories>
<category>数学</category>
</categories>
<tags>
<tag>总结</tag>
<tag>抽象代数</tag>
<tag>群环域</tag>
</tags>
</entry>
<entry>
<title>给博客添加音乐播放器</title>
<url>/2020/08/30/%E7%BB%99%E5%8D%9A%E5%AE%A2%E6%B7%BB%E5%8A%A0%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>利用aplayer插件给博客添加音乐播放器功能</p>
</blockquote>
<a id="more"></a>
<blockquote>
<h3 id="一.-安装插件"><strong>一. 安装插件</strong></h3>
</blockquote>
<p>首先找到站点文件夹根目录,打开命令行,输入如下命令</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">npm install hexo-tag-aplayer --save</span><br></pre></td></tr></table></figure>
<p>等待下载安装完成即可</p>
<blockquote>
<h3 id="二.-获取音乐链接外链"><strong>二. 获取音乐链接外链</strong></h3>
</blockquote>
<p>利用不同的播放器都可以获得音乐外链</p>
<p>这里我借用网易云音乐获取歌曲外链,例如我想插入歌曲《旅行者一号》</p>
<p>在网易云网站中搜索这首歌曲,并打开歌曲的网页播放器,它有一个网址</p>
<blockquote>
<p>https://music.163.com/#/song?id=490439632</p>
</blockquote>
<p>网站后面的 <strong>id=490439632</strong> 就是歌曲的编号了。然后将歌曲的编号加入下面的链接中</p>
<blockquote>
<p>http://music.163.com/song/media/outer/url?id= .mp3</p>
</blockquote>
<p>例如我这里的外链就是</p>
<blockquote>
<p>http://music.163.com/song/media/outer/url?id=490439632.mp3</p>
</blockquote>
<blockquote>
<h3 id="三.-文章中插入播放器"><strong>三. 文章中插入播放器</strong></h3>
</blockquote>
<p>在markdown文章中插如下入语句</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">{% aplayer title author url [picture_url, narrow, autoplay, width:xxx, lrc:xxx] %}</span><br></pre></td></tr></table></figure>
<p>其中的标签参数解释如下</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">title : 曲目标题</span><br><span class="line">author: 曲目作者</span><br><span class="line">url: 音乐文件 URL 地址</span><br><span class="line">picture_url: (可选) 音乐对应的图片地址</span><br><span class="line">narrow: (可选)播放器袖珍风格</span><br><span class="line">autoplay: (可选) 自动播放,移动端浏览器暂时不支持此功能</span><br><span class="line">width:xxx: (可选) 播放器宽度 (默认: 100%)</span><br><span class="line">lrc:xxx: (可选)歌词文件 URL 地址</span><br><span class="line">当开启 Hexo 的 文章资源文件夹 功能时,可以将图片、音乐文件、歌词文件放入与文章对应的资源文件夹中,然后直接引用:</span><br><span class="line"></span><br><span class="line">{% aplayer "Caffeine" "Jeff Williams" "caffeine.mp3" "picture.jpg" "lrc:caffeine.txt" %}</span><br></pre></td></tr></table></figure>
<p>例如 <figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">{% aplayer <span class="string">"旅行者一号"</span> <span class="string">"合唱团"</span> <span class="string">"http://music.163.com/song/media/outer/url?id=490439632.mp3"</span> <span class="string">"https://img-blog.csdnimg.cn/20200830142014845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70#pic_center"</span> %}</span><br></pre></td></tr></table></figure></p>
<p>效果如下</p>
<div id="aplayer-zNDuASqz" class="aplayer aplayer-tag-marker" style="margin-bottom: 20px;">
<pre class="aplayer-lrc-content"></pre>
</div>
<script>
var ap = new APlayer({
element: document.getElementById("aplayer-zNDuASqz"),
narrow: false,
autoplay: false,
showlrc: false,
music: {
title: "旅行者一号",
author: "合唱团",
url: "http://music.163.com/song/media/outer/url?id=490439632.mp3",
pic: "https://img-blog.csdnimg.cn/20200830142014845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70#pic_center",
lrc: ""
}
});
window.aplayers || (window.aplayers = []);
window.aplayers.push(ap);
</script>
<p>到这里基本的播放功能就已经配置完成了</p>
<blockquote>
<h3 id="四.-给播放器添加歌词"><strong>四. 给播放器添加歌词</strong></h3>
</blockquote>
<h3 id="歌词标签">歌词标签</h3>
<p>除了使用标签 <code>lrc</code> 选项来设定歌词,也可以直接使用 <code>aplayerlrc</code> 标签来直接插入歌词文本在博客中:</p>
<p>我们可以利用网易云提供的API来下载歌词</p>
<p>打开网址</p>
<blockquote>
<p>http://music.163.com/api/song/media?id=490439632</p>
</blockquote>
<p>这就是我所想要下载的歌词。注意网址后面的id就是我们上面的歌曲id</p>
<p>不过这个网址中的歌词还包含了一些lrc文件的前后缀,需要把它整理成如下格式:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">{% aplayerlrc "title" "author" "url" "autoplay" %}</span><br><span class="line">[00:00.00]lrc here</span><br><span class="line">{% endaplayerlrc %}</span><br></pre></td></tr></table></figure>
<p>例如这首歌的歌词就是这样:</p>
<figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">{% aplayerlrc "旅行者一号" "合唱团" "http://music.163.com/song/media/outer/url?id=490439632.mp3" %}</span><br><span class="line">[00:04.181]钢琴伴奏:白苑彤[00:06.367]录音/混音:莫家伟[00:07.552][00:10.500]小小火车 快快开向南方[00:17.500]是昨夜的星辰润化作春风[00:22.200]吹绿了小稻秧[00:27.550]小小火车 快快开向南方[00:34.354]饭后三点的窗外 摇曳河道两旁[00:38.851]洁白的小铃兰[00:43.700]春假已经过了一半[00:47.228]小山电话说功课还没做完(太多啦!)[00:52.261]我挎上老街买的白色背包 想四处游玩![01:00.494]海棠山茶紫玉兰 六十四只小鸳鸯[01:09.118]白兔野马梅花鹿 我热爱的大自然[01:17.758]敲鱼松糕大馄饨 三元一份桂花糖[01:27.300]朱砂白墨纸风筝 追着白云山外山[01:38.610][01:56.876]小小火车 快快开向南方[02:04.400]期待一个温暖又美丽的清晨[02:08.664]薄雾飘散的车站[02:13.404]小美亲手做的饼干[02:16.891]虽然有点硬但是还得吃完 (不想吃就寄还给我!)[02:22.060]老妈在远程普及注意事项[02:25.800]知道! 不要太紧张 安心啦![02:30.588]海棠山茶紫玉兰 六十四只小鸳鸯[02:38.781]白兔野马梅花鹿 我热爱的大自然[02:47.448]敲鱼松糕大馄饨 三元一份桂花糖[02:57.000]朱砂白墨纸风筝 追着白云山外山[03:09.400]啦啦啦啦啦啦啦 啦啦啦啦啦啦啦[03:18.603]朱砂白墨纸风筝 追着白云山外山[03:30.200]</span><br><span class="line">{% endaplayerlrc %}</span><br></pre></td></tr></table></figure>
<p>效果如下:</p>
<div id="aplayer-UkeVjwbr" class="aplayer aplayer-tag-marker" style="margin-bottom: 20px;">
<pre class="aplayer-lrc-content">[00:04.181]钢琴伴奏:白苑彤[00:06.367]录音/混音:莫家伟[00:07.552][00:10.500]小小火车 快快开向南方[00:17.500]是昨夜的星辰润化作春风[00:22.200]吹绿了小稻秧[00:27.550]小小火车 快快开向南方[00:34.354]饭后三点的窗外 摇曳河道两旁[00:38.851]洁白的小铃兰[00:43.700]春假已经过了一半[00:47.228]小山电话说功课还没做完(太多啦!)[00:52.261]我挎上老街买的白色背包 想四处游玩![01:00.494]海棠山茶紫玉兰 六十四只小鸳鸯[01:09.118]白兔野马梅花鹿 我热爱的大自然[01:17.758]敲鱼松糕大馄饨 三元一份桂花糖[01:27.300]朱砂白墨纸风筝 追着白云山外山[01:38.610][01:56.876]小小火车 快快开向南方[02:04.400]期待一个温暖又美丽的清晨[02:08.664]薄雾飘散的车站[02:13.404]小美亲手做的饼干[02:16.891]虽然有点硬但是还得吃完 (不想吃就寄还给我!)[02:22.060]老妈在远程普及注意事项[02:25.800]知道! 不要太紧张 安心啦![02:30.588]海棠山茶紫玉兰 六十四只小鸳鸯[02:38.781]白兔野马梅花鹿 我热爱的大自然[02:47.448]敲鱼松糕大馄饨 三元一份桂花糖[02:57.000]朱砂白墨纸风筝 追着白云山外山[03:09.400]啦啦啦啦啦啦啦 啦啦啦啦啦啦啦[03:18.603]朱砂白墨纸风筝 追着白云山外山[03:30.200]</pre>
</div>
<script>
var ap = new APlayer({
element: document.getElementById("aplayer-UkeVjwbr"),
narrow: false,
autoplay: false,
showlrc: 2,
music: {
title: "旅行者一号",
author: "合唱团",
url: "http://music.163.com/song/media/outer/url?id=490439632.mp3",
pic: "https://img-blog.csdnimg.cn/20200830142014845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70#pic_center",
}
});
window.aplayers || (window.aplayers = []);
window.aplayers.push(ap);
</script>
<p>还可以给歌曲添加播放列表 <figure class="highlight plain"><table><tr><td class="code"><pre><span class="line">播放列表</span><br><span class="line">{% aplayerlist %}</span><br><span class="line">{</span><br><span class="line"> "narrow": false, // (可选)播放器袖珍风格</span><br><span class="line"> "autoplay": true, // (可选) 自动播放,移动端浏览器暂时不支持此功能</span><br><span class="line"> "mode": "random", // (可选)曲目循环类型,有 'random'(随机播放), 'single' (单曲播放), 'circulation' (循环播放), 'order' (列表播放), 默认:'circulation' </span><br><span class="line"> "showlrc": 3, // (可选)歌词显示配置项,可选项有:1,2,3</span><br><span class="line"> "mutex": true, // (可选)该选项开启时,如果同页面有其他 aplayer 播放,该播放器会暂停</span><br><span class="line"> "theme": "#e6d0b2", // (可选)播放器风格色彩设置,默认:#b7daff</span><br><span class="line"> "preload": "metadata", // (可选)音乐文件预载入模式,可选项: 'none' 'metadata' 'auto', 默认: 'auto'</span><br><span class="line"> "listmaxheight": "513px", // (可选) 该播放列表的最大长度</span><br><span class="line"> "music": [</span><br><span class="line"> {</span><br><span class="line"> "title": "CoCo",</span><br><span class="line"> "author": "Jeff Williams",</span><br><span class="line"> "url": "caffeine.mp3",</span><br><span class="line"> "pic": "caffeine.jpeg",</span><br><span class="line"> "lrc": "caffeine.txt"</span><br><span class="line"> },</span><br><span class="line"> {</span><br><span class="line"> "title": "アイロニ",</span><br><span class="line"> "author": "鹿乃",</span><br><span class="line"> "url": "irony.mp3",</span><br><span class="line"> "pic": "irony.jpg"</span><br><span class="line"> }</span><br><span class="line"> ]</span><br><span class="line">}</span><br><span class="line">{% endaplayerlist %}</span><br></pre></td></tr></table></figure></p>
]]></content>
<categories>
<category>博客搭建</category>
</categories>
<tags>
<tag>音乐播放器</tag>
<tag>hexo</tag>
</tags>
</entry>
<entry>
<title>英语在高考中的权重可以调整吗</title>
<url>/2020/04/16/%E8%8B%B1%E8%AF%AD%E5%9C%A8%E9%AB%98%E8%80%83%E4%B8%AD%E7%9A%84%E6%9D%83%E9%87%8D%E5%8F%AF%E4%BB%A5%E8%B0%83%E6%95%B4%E5%90%97/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>最近看到一个问题 <a href="https://www.zhihu.com/question/387415591/answer/1152066851" target="_blank" rel="noopener">郑强认为「我们过分夸大了英语在成长中的分量,英语耗费了中国青年宝贵的时光」,怎么看?</a></p>
</blockquote>
<a id="more"></a>
<p>我觉得可以适当降低英语在高考中的比重,但这不是因为英语不重要,相反,因为现在查资料时常常会查到英文内容,我越来越感觉到英语的重要性与自身英语水平的不足</p>
<p>而我之所以觉得可以适当降低高考英语的比重,也是有理由的</p>
<p>一是英语是一个增大社会不公平的学科--发达地区/省会城市的学生往往可以相对比较轻松地学好英语,他的周围环境不断在告诉他英语很重要、老师自己也有较高的水平,相反在欠发达地区的同学想学好英语则要付出多得多的努力,在学习过程中也缺乏正反馈。对于英语水平的地区差异,相信正在读大学的同学们一定会有更深的体会。</p>
<p>而其他比如数学、语文等学科,虽然也会有不同地区教育水平的差距,但这种差距却更容易由自身努力去弥补--无非就是自己多做题多总结而已。</p>
<p>别忘了,高考除了筛选人才的属性外,另一个重要使命是促进社会公平</p>
<p>二是英语比重的适当降低其实不会明显降低学生英语水平。回忆一下高中时光,我们是否去认真学一门学科,并不是由这门课分数的多寡来决定的,学习时长取决于这门课的难度以及我是否对它感兴趣。比如说,语文的总分是150,物理是110,足足比语文少了40分,但是绝大部分人学物理的时长其实是远超语文的,这就是因为物理要比语文更难、更拉分</p>
<p>所以说,在教材不变、难度不变的情况下,只要英语依然拉分,学生们依然会去好好地学习它,无非是疯狂地刷题少了一些。擅长英语的人依旧擅长,不擅长的人依然不擅长</p>
<p>三是英语要在实际使用中才能更快地进步。诚然英语水平对于一个人才来说的确很重要,而且多数学科的一手资料也都是英雄写成,但是能读懂这些英语靠的并不是中学英语--靠的是长期浸淫在这些论文/资料中日积月累下来的词汇量。</p>
<p>我高中时的英语考试成绩还算勉强,常常能考到130分以上,但我深知我自己的实际水平很不咋地,也根本无法直接阅读一篇原版英语文章,更不用谈去看与专业相关的英语了。但只有真正自己在实际中需要使用一样东西时,学生才有更多的动力去学习它,英语水平也才能有更快地长进。</p>
<p>在高考英语比重只是适当降低的情况下,该学时再继续学也完全来得及</p>
<p><img src="https://img-blog.csdnimg.cn/20200416184346500.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" /></p>
]]></content>
<categories>
<category>感想</category>
</categories>
<tags>
<tag>知乎</tag>
<tag>高考</tag>
<tag>英语</tag>
</tags>
</entry>
<entry>
<title>我喜欢</title>
<url>/2020/05/06/%E6%88%91%E5%96%9C%E6%AC%A2/</url>
<content><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><blockquote>
<p>--《what I adore》 合唱</p>
</blockquote>
<a id="more"></a>
<div id="aplayer-xXfhPQfF" class="aplayer aplayer-tag-marker" style="margin-bottom: 20px;">
<pre class="aplayer-lrc-content"></pre>
</div>
<script>
var ap = new APlayer({
element: document.getElementById("aplayer-xXfhPQfF"),
narrow: false,
autoplay: false,
showlrc: false,
music: {
title: "我喜欢",
author: "金承志",
url: "http://music.163.com/song/media/outer/url?id=464647435.mp3",
pic: "https://img-blog.csdnimg.cn/20200831131615443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70#pic_center",
lrc: ""
}
});
window.aplayers || (window.aplayers = []);
window.aplayers.push(ap);
</script>
<blockquote>
<p>我喜欢 无尽田野上奔跑的麋鹿</p>
<p>我喜欢 外婆门前的榕树</p>
<p>我喜欢母亲的便当</p>
<p>我喜欢父亲的胡渣</p>
<p>我喜欢八月的夜晚还在营业的游乐场</p>
<p>我喜欢放学的铃铛</p>
<p>我喜欢停电的夜晚</p>
<p>点一对蜡烛 在幽静的玄关</p>
<p>我喜欢 城市尽头那远远的青山</p>
<p>我喜欢 热气球飞上西边的天空</p>
<p>我喜欢 清晨的石板路</p>
<p>雾腾腾的早餐店 阿公的桂花糕</p>
<p>我喜欢 每一朵暮云 每一株绿树</p>
</blockquote>
<p><img src="https://img-blog.csdnimg.cn/20200506214619877.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTM4NDU0,size_16,color_FFFFFF,t_70" /></p>
]]></content>
<categories>