有趣的人

    有一个肥宅,家里囤积了一冰箱的肥宅快乐水,还有肥宅快乐酒。其实知道肥宅快乐水也好,肥宅快乐酒也好,似乎都不是什么好东西,不过谁在乎呢!肥宅的日子就是这样。
    曾经有一只又黑又瘦的猪在肥宅家里住过一段时间,看起来像家猪却长出了獠牙。猪刚来家里的时候正是台风过后,肥宅已经饿了两天了,开门看见一只猪排站在门口,自然是喜不自胜一把扯起猪尾巴就把猪拽进来了,看来今天是有一顿大餐了。万万没有想到此时猪发出了杀猪般的嚎叫:“救命呀~杀猪啦~”此处并没有使用拟人的手法,这头猪真的说话了,肥宅吓了一跳连忙把猪放开了。猪得到片刻的喘息,连忙说道:“老弟,有话好好说,我就在你这里接住一段时间,时间一到我就走。”肥宅连忙拒绝:“不行,我家里不养宠物。”这么一说猪就不愿意了“老猪我可不是宠物,你见过宠物说人话的么?”肥宅一想也是挺有道理的,何况本来肥宅一人住也挺无聊,再住进一只猪也并没有什么不好的,所以猪就理所当然的搬了进来。
    这一天猪与肥宅一起坐在沙发上吹牛逼,猪说:“你信不信,我日过的母猪比你看过的毛片还要多!”,肥宅看着硬盘里8G的种子,摇头表示除非自己是智障否则是坚决不会信的;眼看肥宅没有被自己吹过的牛逼震惊,猪表示不乐意了,拍着肥宅的肩膀说:“伙计,你说你也是一表人才,为啥自甘堕落,宁愿与种子为伍与硬盘为伴?”这番话让肥宅陷入了沉思。
    不久之前一位自称耶稣的人也在肥宅这里住了一段时间,看到肥宅硬盘中8G的种子,耶稣表示很是同情,另外为了感谢肥宅的感谢耶稣表示要让肥宅成为一个真正的少女杀手,从而摆脱毛片恶魔的魔掌,于是跟肥宅说:“阿宅,为了感谢你的收留,我决定给你一个选择,你是愿意成为一个有趣的人还是一个有钱的人?”肥宅表示很惊讶,真的有这么好的事情么?耶稣表示是的,只是需要你做出选择。听完这番话肥宅想起了自己小时候喜欢的姑娘小花,曾经为了追求小花,肥宅攒了一年的零花钱给小花买了一个小花心仪已久的胸针正兴冲冲的想要送给小花,可是当他把胸针给小花的时候小花却对他说:“小宅,你不需要送我这么贵重的礼物,我是不会喜欢你的,我喜欢的是小强!”肥宅听后心痛不已,质问小花为什么,小花说:“因为小强比你有趣,跟他在一起比跟你一起开心多了!”听完小花的话肥宅颓然的离开了,他本就不是一个有趣的人,从小到大他只是默默的学习,默默的运动,默默的工作,默默的看着日出日落,看着雨点雪花;他不知道什么是有趣,他想也许操场上让小花笑得花枝乱颤的小强是有趣的吧,所以他一直想成为一个有趣的人,成为一个能让小花开心的人。
    所以他对耶稣说:“我要成为一个有趣的人!”听到他的回答耶稣很惊讶,但是依然点点头然后就离开了,耶稣离开之后肥宅的生活如往常一样,也似乎并没有变得多么有趣。那个骗子一定是不想给我伙食费故意骗我的,肥宅心里想着,不过肥宅也并没有放在心上,直到猪跟他说话他才想起这件事情。所以他问猪:“老猪,你说你是不是一个有趣的人,哦不,有趣的猪?”猪白了他一眼说:“废话,我可是少女猪杀手,可谓阅猪无数了,只要我看上的猪没有不拜倒在我性感的獠牙和鬃毛上的!” “哦,看不出来你这么牛逼呀?那请问一下你是怎样做一只有趣的猪呢?” “这还不简单,跟野外的猪说安定,与圈养的猪说自由,向待宰的猪说来生,十拿九稳!”听话猪的歪理邪说肥宅只当在说笑,并没有放在心上:“喝酒,喝酒!”这晚肥仔喝醉了,醉倒在沙发上,梦里的肥宅又回到了年轻的时候,他帮小花别好胸针,小花被他逗得笑得花枝乱颤,小花笑着跟他说:“小强,你真的很有趣。”肥宅在沙发上翻了个身~

阅读全文

一切随缘

    游完泳回来看了两集破产姐妹,依旧是这么的毁三观,本来想着把实验做一下,顺便把论文写完赶快投出去交差,但是总是没有心情做实验,另外书房的灯好像坏了,只能靠台灯艰难度日了,以前的时候我最喜欢这种漆黑的环境,开一盏台灯,好像回到宿舍里通宵赶代码的日子,但是现在好像不太喜欢这样了,主要是开着台灯弹琴可能看不清谱子,但是感觉弹来弹去也没有什么长进,好像还越来越不会了,着我就很尴尬了不是,另外感觉最近总是想着看手机,想找个人聊聊天,其实也不知道聊什么。
    最近生活习惯好了很多,晚上一般都睡得挺早的,不知道是因为搬家住的远了,每天早上起得比较早还是因为健身之后太累。昨天的时候在车上看到一个知乎话题,关于自律。今年年初算起,一个人独居有半年了,一开始其实觉得挺好,终于又可以享受一个人时间,又可以默默的躲在房间的角落发呆,或者看书;然后时间慢慢过去,有时候晚上回家又会感觉到很孤单,一种很难描述的孤单,或者我可以将其称为空虚,好像缺了点什么,然后不停的刷着各种社交工具,其实我算是一个社交很少的人,拿起手机,发现不管是微信还是QQ,似乎都没有人找,这么一段时间以来好像在社交App上主动联系我的都是邀请去参加婚礼的…WTF。
    乱七八糟的东西写了一堆,好像心情也没有什么变化,还是不太想写代码,不太想写文章,不想做实验,不想干所有有意义的事情,只想默默的做些浪费生命的事情把时间打发了……还是想着找个人聊聊天,又拿起手机看了一下,发现一如既往没有消息,所以又失望的放下了。其实我自己都不太愿意去联系别人,有何必指望着人家会联系我呢。着大半年来总是偶尔会有这样的时候,自己一个人在家,默默的弹着琴或者什么都不做就是发呆,很想有人能够找我聊聊天,但是却没有,也不太愿意去找别人聊天,一来怕麻烦别人,二来实际上可能也不会有人喜欢尬聊吧,再说自己负面情绪这么多,如果影响了朋友们也不见得是什么好事。有很多人都觉得我这样是缺一个女朋友,实际上并不是,我好像不太需要一个女朋友这么亲密的关系,而且也很难再建立一段亲密关系。因为自从上次分手后似乎对自我边界的认识越发的清晰了,越发的不想别人介入我自己的生活边界,也不太愿意因为其他人改变生活习惯,就这么随缘吧,反正都是佛系青年,随缘也没有什么不好的。
    上周末跟@甘甜聊了一下她婚后的带娃生活,实际上自从她结婚之后就很少聊天了,当然一方面是我工作也比较忙,另外也是觉得她太累贸然打扰似乎不太好。听着她讲述自己的生活,我刚开始是很惊讶的,因为在我的印象中我们聊天从来都是当下的苟且以及诗和远方,很少有这些生活中家长里短的事情,但是这次听她说了很多关于生活的事情,这让我仿佛看见了小时候爸妈的生活。我觉得很有意思,同时也坚定了我应该一个人生活的信念,实际上真正的soul mate是极少的,可能遇到的概率比中彩票概率还要低,另外就算是soul mate也可能被两个家庭的琐事把热情消磨得干干净净,所以还是就这样吧,一切随缘。

阅读全文

一座孤岛

    第一次看这部电影应该是本科的时候,晚上本来在研究RNN,突然有点烦,又把这部剧情舒缓的动画翻出来看看。动画讲述一位澳大利亚女孩儿与一位纽约具有自闭症的中年通过书信往来结下深厚友谊的故事,小女孩儿Mary生活的家庭并不幸福,生活中缺少父亲的陪伴和母亲的关爱,另外由于既不聪明也不可爱,所以从小就没有什么朋友。一次偶然的机会,女孩儿突发奇想,想要给一位笔友写信,于是这封信漂洋过海来到纽约,让Max看到了这封信,由此揭开了他们长达二十年的友情。
    这是一部黏土动画,没有什么激烈的剧情冲突,只是简单的通过一封封的书信介绍各自的生活以及对生活的看法。通过一封封的书信,我们看到了两个孤独的身影,跨过万水千山,相互鼓励相互安慰。我看到有人说是爱情,实际上却不是这么认为,爱情的力量可以跨越万水千山,也可以相互鼓励和安慰,但是爱情更多的陪伴,是双目对视时眼中溢出的爱意,是房间里留下的某个人的身影,是一日不见如隔三秋的思念。而友情却不是这样,与爱相似,但是与爱无关,可以陪伴,也可以潇洒离开。在这里我不想谈关于友情还是爱情,当我重新看完这一部影片后涌现最深刻的感受是孤独。
    我们生而孤独,如同身处一座孤岛,这便是我们一生的牢笼,不管是身体上还是心理上,爱情是找到一个愿意踏上你的岛来陪你孤独的人,而友情是在另一座岛上理解你孤独的人。实际上这两种感情中的任何一种都是可遇而不可求的,所以我们不断的遇见,然后不断的忘记,最后发现原来还是只有自己。有时候我回家,坐在书房看着我的琴发呆,或者是关上了所有的灯,坐在客厅沙发上发呆。有时候我会想,如果我这一生就这么过去了,一个人默默的在这黑暗中死去,那该是一件多么悲伤的故事。前一些日子看到日本的一个无缘死亡,会感觉到有一些恐慌;一个人没有伴侣,失去所有亲人与朋友之后独自在自己的住所迎接死亡的到来,这该有多么可怕。实际上我们又注定要迎接死亡的到来,前几天的时候以为舅奶奶去世了,我是才知道消息。在我的印象中她的身体一直都很好的,直到我舅姥爷去世,她的身体便是一日不如一日了。也许是思念,也许是孤独,总之是一日不如一日。所以我会想,如果远在天边有一个人,他能够明白我的孤独,能够分担我的忧伤,分享我的快乐,这是一件多么美好的事情。实际上社交网络与通讯工具的发展让我们距离更近了,却更加疏离了。我想你,所以我给你电话,然后我还是想你,我又给你电话,然后你觉得我很烦,我也觉得自己很烦,所以我便不想你了,失去距离让我们的沟通更加高效,但是我们的思念变得廉价,我们的理解我们的同理心变得一文不值,所以我们变得更加孤独了,我们只想找到一个温暖的怀抱来填满我们空空荡荡的房间,而不是一个美好的灵魂来填满我们空空荡荡的心。
    电影看完了,实际上还是很羡慕剧中Mary和Max,虽然面对生活的泥潭,但是如果我知道远在天边如果有一个人能够理解我,也在盼着我的消息,想想也应该是让生活无论如何都要继续下去的动力吧。

阅读全文

不读书(六)

    要是在四五年前看这本书,我可能不会喜欢,现在看起来却是看得我直冒冷汗。其实我不太喜欢潜规则这个词,这个词显得太不正义,总有一种鬼鬼祟祟的感觉,但是不得不承认,这个词的创立简直是对几千年来社会处事准则最准确的归纳和概括。为什么叫潜规则,因为这样的规则是不能放在台面上说的,为什么不能放在台面上说,因为其中涉及了太多人性中不是那么光明伟岸的一面,所以我们本能的对其缄口不言,但是行事中却默许其存在。
    晶姐推荐的这本书在上周终于看完了,看前半部分的时候会震撼很多,后半部分反而习以为常了,本书全面的介绍了潜规则在中国这个集权社会中的体现,分析了潜规则形成的原因并解释了这么多年来一直存在的理由。整本书以古代官场为背景,分析了古代官场中一系列的潜规则现象。实际上几千年来,我国作为一个中央集权制的国家,国家掌握着最大的资源和话语权,而作为国家代表的官员则是国家资源分配权力的实际掌控者。实际上整个社会阶层呈现一个金字塔状,最底层是数量最多的百姓,然后依次向上是逐级官僚,实际上整个官僚体系都是建立在对农名阶级的剥削基础上。但是为了避免过度剥削而引起整个体系的崩塌,于是乎建立了一整套例如仁义道德,忠君爱民,清正廉明等等不过是一套看似华丽的外衣罢了,说到底不过是赤裸裸的利益勾结和利益计算而已。
以下是摘抄了书中的几个观点进行分析:

阅读全文

tensorflow-二十七弹

    tensorflow的学习进行到这个阶段,实际上已经处于一个入门阶段了,在前面的学习过程中我们着重介绍了CNN的构造以及实现过程,另外也提及了一些关于爬虫的知识以及一些关于机器学习的数学基础,现在感觉整个CNN的过程已经掌握得差不多了,剩下就是各种CNN网络得实现了,这个实际上就跟拼接积木差不多了,是一些调参得过程,其中如果进行深入的数学分析就太复杂了,所以在这里先放一放,先接触一下其他的类型的深度网络,然后再回来研究网络的构造问题,下面主要进行RNN的学习:

阅读全文

tensorflow-二十八弹

    上一次的学习过程中介绍了RNN,然后列举了它的流程以及理解,然后运行代码试了一下,有了一个直观的体会,但是代码的逻辑实际上还是比较奇怪,而且列出的公式也不直观,实际上在27弹中所提到了公式是进行简化了的公式,所以看起来会比较复杂一些,这次在深入理解之后重新梳理了一下,然后把公式串起来。

阅读全文

tensorflow-二十六弹

    写了很多关于tensorflow的部分,但是都比较零散,因为以前不管是对于python还是对于机器学习都了解得不够深刻,因此写出来的东西也就显得比较零散,代码不能够构成一个体系,所以也就谈不上什么积累,不过是多了解了一些关于tensorflow的东西而已,现在不管是对于python还是对于深度学习都有了更加深刻的理解,所以准备重新对整个过程进行组织,代码进行更加有条理的重构,以便于进行进一步的扩展。
  目前只搭了一个CNN的框架,整个构架描述为:

阅读全文

RPC(共线条件方程)校正迭代方法分析

这次主要分析GDAL中RPC校正的实现,以及在GDAL中PRPC校正的迭代方法,另外关于迭代计算还是有一些关于迭代的疑惑:

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
static bool
RPCInverseTransformPoint( GDALRPCTransformInfo *psTransform,
double dfPixel, double dfLine, double dfUserHeight,
double *pdfLong, double *pdfLat )

{
// Memo:
// Known to work with 40 iterations with DEM on all points (int coord and
// +0.5,+0.5 shift) of flock1.20160216_041050_0905.tif, especially on (0,0).

/* -------------------------------------------------------------------- */
/* Compute an initial approximation based on linear */
/* interpolation from our reference point. */
/* -------------------------------------------------------------------- */
double dfResultX =
psTransform->adfPLToLatLongGeoTransform[0] +
psTransform->adfPLToLatLongGeoTransform[1] * dfPixel +
psTransform->adfPLToLatLongGeoTransform[2] * dfLine;

double dfResultY =
psTransform->adfPLToLatLongGeoTransform[3] +
psTransform->adfPLToLatLongGeoTransform[4] * dfPixel +
psTransform->adfPLToLatLongGeoTransform[5] * dfLine;

if( psTransform->bRPCInverseVerbose )
{
CPLDebug("RPC", "Computing inverse transform for (pixel,line)=(%f,%f)",
dfPixel, dfLine);
}
VSILFILE* fpLog = nullptr;
if( psTransform->pszRPCInverseLog )
{
fpLog =
VSIFOpenL( CPLResetExtension(psTransform->pszRPCInverseLog, "csvt"),
"wb" );
if( fpLog != nullptr )
{
VSIFPrintfL( fpLog, "Integer,Real,Real,Real,String,Real,Real\n" );
VSIFCloseL( fpLog );
}
fpLog = VSIFOpenL( psTransform->pszRPCInverseLog, "wb" );
if( fpLog != nullptr )
VSIFPrintfL(
fpLog,
"iter,long,lat,height,WKT,error_pixel_x,error_pixel_y\n" );
}

/* -------------------------------------------------------------------- */
/* Now iterate, trying to find a closer LL location that will */
/* back transform to the indicated pixel and line. */
/* -------------------------------------------------------------------- */
double dfPixelDeltaX = 0.0;
double dfPixelDeltaY = 0.0;
double dfLastResultX = 0.0;
double dfLastResultY = 0.0;
double dfLastPixelDeltaX = 0.0;
double dfLastPixelDeltaY = 0.0;
double dfDEMH = 0.0;
bool bLastPixelDeltaValid = false;
const int nMaxIterations =
(psTransform->nMaxIterations > 0) ? psTransform->nMaxIterations :
(psTransform->poDS != nullptr) ? 20 : 10;
int nCountConsecutiveErrorBelow2 = 0;

int iIter = 0; // Used after for.
for( ; iIter < nMaxIterations; iIter++ )
{
double dfBackPixel = 0.0;
double dfBackLine = 0.0;

// Update DEMH.
dfDEMH = 0.0;
double dfDEMPixel = 0.0;
double dfDEMLine = 0.0;
if( !GDALRPCGetHeightAtLongLat(psTransform, dfResultX, dfResultY,
&dfDEMH, &dfDEMPixel, &dfDEMLine) )
{
if( psTransform->poDS )
{
CPLDebug(
"RPC", "DEM (pixel, line) = (%g, %g)",
dfDEMPixel, dfDEMLine);
}

// The first time, the guess might be completely out of the
// validity of the DEM, so pickup the "reference Z" as the
// first guess or the closest point of the DEM by snapping to it.
if( iIter == 0 )
{
bool bUseRefZ = true;
if( psTransform->poDS )
{
if( dfDEMPixel >= psTransform->poDS->GetRasterXSize() )
dfDEMPixel = psTransform->poDS->GetRasterXSize() - 0.5;
else if( dfDEMPixel < 0 )
dfDEMPixel = 0.5;
if( dfDEMLine >= psTransform->poDS->GetRasterYSize() )
dfDEMLine = psTransform->poDS->GetRasterYSize() - 0.5;
else if( dfDEMPixel < 0 )
dfDEMPixel = 0.5;
if( GDALRPCGetDEMHeight( psTransform, dfDEMPixel,
dfDEMLine, &dfDEMH) )
{
bUseRefZ = false;
CPLDebug(
"RPC", "Iteration %d for (pixel, line) = (%g, %g): "
"No elevation value at %.15g %.15g. "
"Using elevation %g at DEM (pixel, line) = "
"(%g, %g) (snapping to boundaries) instead",
iIter, dfPixel, dfLine,
dfResultX, dfResultY,
dfDEMH, dfDEMPixel, dfDEMLine );
}
}
if( bUseRefZ )
{
dfDEMH = psTransform->dfRefZ;
CPLDebug(
"RPC", "Iteration %d for (pixel, line) = (%g, %g): "
"No elevation value at %.15g %.15g. "
"Using elevation %g of reference point instead",
iIter, dfPixel, dfLine,
dfResultX, dfResultY,
dfDEMH);
}
}
else
{
CPLDebug("RPC", "Iteration %d for (pixel, line) = (%g, %g): "
"No elevation value at %.15g %.15g. Erroring out",
iIter, dfPixel, dfLine, dfResultX, dfResultY);
if( fpLog )
VSIFCloseL(fpLog);
return false;
}
}

RPCTransformPoint( psTransform, dfResultX, dfResultY,
dfUserHeight + dfDEMH,
&dfBackPixel, &dfBackLine );

dfPixelDeltaX = dfBackPixel - dfPixel;
dfPixelDeltaY = dfBackLine - dfLine;

if( psTransform->bRPCInverseVerbose )
{
CPLDebug(
"RPC", "Iter %d: dfPixelDeltaX=%.02f, dfPixelDeltaY=%.02f, "
"long=%f, lat=%f, height=%f",
iIter, dfPixelDeltaX, dfPixelDeltaY,
dfResultX, dfResultY, dfUserHeight + dfDEMH);
}
if( fpLog != nullptr )
{
VSIFPrintfL(
fpLog, "%d,%.12f,%.12f,%f,\"POINT(%.12f %.12f)\",%f,%f\n",
iIter, dfResultX, dfResultY, dfUserHeight + dfDEMH,
dfResultX, dfResultY, dfPixelDeltaX, dfPixelDeltaY);
}

const double dfError =
std::max(std::abs(dfPixelDeltaX), std::abs(dfPixelDeltaY));
if( dfError < psTransform->dfPixErrThreshold )
{
iIter = -1;
if( psTransform->bRPCInverseVerbose )
{
CPLDebug( "RPC", "Converged!" );
}
break;
}
else if( psTransform->poDS != nullptr &&
bLastPixelDeltaValid &&
dfPixelDeltaX * dfLastPixelDeltaX < 0 &&
dfPixelDeltaY * dfLastPixelDeltaY < 0 )
{
// When there is a DEM, if the error changes sign, we might
// oscillate forever, so take a mean position as a new guess.
if( psTransform->bRPCInverseVerbose )
{
CPLDebug(
"RPC", "Oscillation detected. "
"Taking mean of 2 previous results as new guess" );
}
dfResultX =
( fabs(dfPixelDeltaX) * dfLastResultX +
fabs(dfLastPixelDeltaX) * dfResultX ) /
(fabs(dfPixelDeltaX) + fabs(dfLastPixelDeltaX));
dfResultY =
( fabs(dfPixelDeltaY) * dfLastResultY +
fabs(dfLastPixelDeltaY) * dfResultY ) /
(fabs(dfPixelDeltaY) + fabs(dfLastPixelDeltaY));
bLastPixelDeltaValid = false;
nCountConsecutiveErrorBelow2 = 0;
continue;
}

double dfBoostFactor = 1.0;
if( psTransform->poDS != nullptr &&
nCountConsecutiveErrorBelow2 >= 5 && dfError < 2 )
{
// When there is a DEM, if we remain below a given threshold (somewhat
// arbitrarily set to 2 pixels) for some time, apply a "boost factor"
// for the new guessed result, in the hope we will go out of the
// somewhat current stuck situation.
dfBoostFactor = 10;
if( psTransform->bRPCInverseVerbose )
{
CPLDebug("RPC", "Applying boost factor 10");
}
}

if( dfError < 2 )
nCountConsecutiveErrorBelow2++;
else
nCountConsecutiveErrorBelow2 = 0;

const double dfNewResultX = dfResultX
- ( dfPixelDeltaX * psTransform->adfPLToLatLongGeoTransform[1] *
dfBoostFactor )
- ( dfPixelDeltaY * psTransform->adfPLToLatLongGeoTransform[2] *
dfBoostFactor );
const double dfNewResultY = dfResultY
- ( dfPixelDeltaX * psTransform->adfPLToLatLongGeoTransform[4] *
dfBoostFactor )
- ( dfPixelDeltaY * psTransform->adfPLToLatLongGeoTransform[5] *
dfBoostFactor );

dfLastResultX = dfResultX;
dfLastResultY = dfResultY;
dfResultX = dfNewResultX;
dfResultY = dfNewResultY;
dfLastPixelDeltaX = dfPixelDeltaX;
dfLastPixelDeltaY = dfPixelDeltaY;
bLastPixelDeltaValid = true;
}
if( fpLog != nullptr )
VSIFCloseL( fpLog );

if( iIter != -1 )
{
CPLDebug( "RPC", "Failed Iterations %d: Got: %.16g,%.16g Offset=%g,%g",
iIter,
dfResultX, dfResultY,
dfPixelDeltaX, dfPixelDeltaY );
return false;
}

*pdfLong = dfResultX;
*pdfLat = dfResultY;
return true;
}

阅读全文

混合高斯分布

本来是想着做一个混合高斯分布,但是想着点云的分布应该不是混合高斯布,所以又想看看是不是应该是均匀分布,但是我仔细一想还是应该是高斯分布,因为我们现在讨论的并不是点云本身的分布特点,而是点云聚类的分布特点,实际上对于给定的类别,距离聚类中心越近属于该类别的可能性就越大,因此还是应当是高斯分布。为了更加具体的说明问题,我模拟以下两个数据集:

图中两个点集都是均匀分布,黄色框中为的黑色点为一个随机点,实际上我们认为我们每一个点都是随机均匀分布而且激光束发出的激光理论上也应该是均匀分布,但是实际上地物的分布有其自身的特点,且相似的地物具有聚集性(地理学第一定律)因此我们可以认为地物的分布是具有高斯分布特性的,而地物的分布实际上会影响点云在空间上的密度使其呈现出与地物分布类似的密度。因此我们有理由相信高斯分布县比喻均匀分布能够更好的对地物的分布进行拟合。

阅读全文

python修饰符

本来分类应该分类到编程这一类下,但是想想所有关于python的学习都放在机器学习下,另外当时学习python的目的就是搞机器学习,所以也就放在了这一类下面,其实python的语法我就不再进行介绍了,面向对象的语言的语法大致上都差不多只是略有点区别而已,但是以前一直有一点不明确,那就是关于修饰符的作用,在做项目的时候看到了并且胡乱使用了一通,今天特意就这个问题进行一下总结。

阅读全文