卡坦岛如何改cab语言包如何安装

玩过这几款经典桌游的进来答一下:) 卡坦岛、卡卡颂、三国杀_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
玩过这几款经典桌游的进来答一下:) 卡坦岛、卡卡颂、三国杀
狼人这几个桌游各有哪些侧重?分析分析,说说经验一般和朋友一起玩另外,你们觉得选那两个比较好?我打算买2个,从双卡里选一个,从三b狼里选一个卡坦岛、卡卡颂、三国杀、bang
我有更好的答案
。至于这三个里选哪个最好看你们人数定,三国杀的话一般10人一下都可以,一般6人或8人最好,三国杀相对信息量稍大,但玩几副就知道了,bang的话6 7人都可以,有点像三国杀和狼人的结合体,狼人的话一定要人多才好玩,所以耐玩一点,好歹人家是得过德国最佳桌游奖。另外三个比的话。。,卡坦岛是3-4人游戏,卡卡颂是2-5人游戏,其实自己做卡片玩也可以。相比的话,我刚开始觉得卡卡颂比较好玩,但是很容易厌,就是狼人多了一打奇迹牌(就是人死的时候翻得牌,上面有些要执行的内容)。。。另外买仿的不影响游戏本身,卡坦的话因为随机性比较大,每次玩的都不一样,首先不建议买狼人,因为狼人就是杀人游戏,最好要10个以上。,只是身份的问题卡坦和卡卡颂都很不错
采纳率:41%
所以只需要2选一,狼人就是通常所说的杀人游戏的另一种主题版本,这三个都是派对游戏,当然狼人要求人数更多,时间在20分钟左右这个选择要看你的游戏人群了三国杀是抄袭bang的游戏,至少要10人以上狼人只要有规则自己也可以做卡坦岛属于策略游戏,3-4人,游戏时间在90分钟左右卡卡颂属于家庭游戏(当然也有策略成分),2-5人
其实这真的看个人喜好,卡坦岛比卡卡颂复杂一点点,个人觉得要优于卡卡颂三国杀,bang其实本质是一个游戏,但是三国杀比较流行,假如要玩就买三国杀吧,虽然三国杀是山寨的~,狼人很好玩,但对人数要求太高了,至少9个(要有一个裁判),很难找齐人的。高仿还不错,不过bang 三国杀,狼人本来就很便宜,仿就没必要买了,但是山寨的就不要买了,大多看起来都比较劣质。另外再推荐一些高策略度的,如电厂,波多黎各,还有比较低策略的圣胡安,富饶之城都不错,前两个比较贵,后面的两个挺好的,尤其是圣胡安,人数要求低,策略性强,是波多黎各的简化版哦!~
个人推荐卡坦岛,因为卡卡颂最后的记分规则比较麻烦,尤其是草地的部分。另外对抗性感觉也没有卡坦岛强。而且这两个游戏真正有意思的时候都是3-4个人的时候,加上扩展,并没有什么明显的效果。剩下那三个,说实话,都不是很推荐。杀人类游戏,就那么回事,三国杀现在做的有点烂,闪卡、联赛、补充包,这么下去就是哄骗你继续投资呢,并且运气成分很高。我推荐你了解下shadow hunter,估计你会喜欢。我自己超级喜欢 瘟疫危机(传染病),你也可以了解一下。
卡坦岛,3-4人游戏,但最好是4个人玩,4人时最平衡;有扩展能扩到5-6人,但策略性大大下降了~卡卡颂,2-5人游戏,加个扩展能6个人,2人游戏时策略性较强,人越多策略性越少了~选哪个,看你平时能找到几个人了~后面三个,三国杀,题材大家都知道,相对于另外两个而言很容易学习,推荐这个了~bang和三国杀一样,三国杀就是从bang改编过来的~狼人和杀人游戏差不多,估计会有人玩腻了~
看你玩的人数多少,我觉得三国比较耐玩和气氛好
其他5条回答
为您推荐:
其他类似问题
您可能关注的内容
卡坦岛的相关知识
等待您来回答卡坦岛Mac版 V1.3(Mac App Store)&img src=&/50/v2-cfa9840bcd4e8c224a15e176_b.jpg& data-rawwidth=&1620& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1620& data-original=&/50/v2-cfa9840bcd4e8c224a15e176_r.jpg&&&p&原文: &a href=&/?target=https%3A///learning-ai-if-you-suck-at-math-p4-tensors-illustrated-with-cats-27f%23.ibwfcpkna& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning AI if You Suck at Math — P4 — Tensors Illustrated (with Cats!)&i class=&icon-external&&&/i&&/a&&/p&&p&在线运行代码版:&a href=&/?target=https%3A//jizhi.im/blog/post/learning_ai_suck_math_04& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数学不行还学AI-第4话-图解张量(内有恶猫) - 集智专栏&i class=&icon-external&&&/i&&/a&&br&&/p&&p&作者:&a href=&/?target=https%3A///%40dan.jeffries& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Daniel Jeffries&i class=&icon-external&&&/i&&/a&&/p&&p&翻译/注释:Kaiser(&a href=&/?target=http%3A///kaiser0730& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&王司图&i class=&icon-external&&&/i&&/a&)&/p&&h2&&b&前言&/b&&/h2&&p&昨天翻译了一篇用Keras识别AV女优的文章,虽然反响很热烈,但是很多朋友反映看不懂。其实那篇文章自身就不是特别完备,只是提供个大概思路,并不能逐步复现。所以今天来一篇相对简单、通俗的。 &br&&/p&&p&读者朋友们可能奇怪,为什么一上来就是“第4话”。 这是一个连载中的系列文章,题为&i&Learning AI if You Suck at Math&/i&,一听就很丧。北邮陈老师(&a href=&/?target=http%3A///u/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&爱可可-爱生活&i class=&icon-external&&&/i&&/a&)翻译为“数学菜鸟的AI学习攻略”,这太正能量了不够丧。所以我翻译为“数学不行还学AI”。&/p&&p&此处的“还”字语气应模仿周星驰在《功夫》里的“还踢球!”。 &br&&/p&&img src=&/v2-250c511f09c8c6c03ad18_b.png& data-rawwidth=&1736& data-rawheight=&856& class=&origin_image zh-lightbox-thumb& width=&1736& data-original=&/v2-250c511f09c8c6c03ad18_r.png&&&br&&p&原作者Daniel Jeffries是一位科幻作家,他的新书见下图微博中我的评论,为防“政治敏感”罪名,我就不翻译了(当然,在我自己的网站上,我翻译了)。看他写作的风格(可以说是魔幻了)就可以理解,为什么文章标题一定要翻译的丧。&br&&/p&&img src=&/v2-96ecfabbde20843af9dfe152_b.png& data-rawwidth=&1190& data-rawheight=&1304& class=&origin_image zh-lightbox-thumb& width=&1190& data-original=&/v2-96ecfabbde20843af9dfe152_r.png&&&p&本系列的前三篇没有翻译的原因是这样的:&/p&&p&第一篇:&a href=&/?target=https%3A///learning-ai-if-you-suck-at-math-8bdfb4b79037%23.jaela4odl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning AI if You Suck at Math&i class=&icon-external&&&/i&&/a& 抒情居多,后面推荐了几本数学方面的书籍。感兴趣的朋友可以点击原文查看,因为推荐的都是英文书,所以翻译过来也没有太大价值。&/p&&p&第二篇:&a href=&/?target=https%3A///learning-ai-if-you-suck-at-math-part-two-practical-projects-47d7a1e4e21f%23.9puaasl9c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning AI if You Suck at Math — Part Two — Practical Projects &i class=&icon-external&&&/i&&/a&,作家就是作家,仍然是抒情成分居多,然后介绍了一下Kaggle竞赛以及Keras+TensorFlow框架。&/p&&p&第三篇:&a href=&/?target=https%3A///learning-ai-if-you-suck-at-math-p3-building-an-ai-dream-machine-or-budget-friendly-special-d5a3023140ef%23.ea00ebut0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learning AI if You Suck at Math — P3 — Building an AI Dream Machine or Budget Friendly Special&i class=&icon-external&&&/i&&/a&,终于不抒情了,这是一篇攒机和开发环境配置的攻略。硬件方面,作者的推荐与我国国情有一定偏差。&b&开发环境配置方面,我已经在&a href=&/?target=https%3A//jizhi.im/blog/post/learning_ai_suck_math_04& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&集智&i class=&icon-external&&&/i&&/a&的后台做好了,读者可以直接在网页上运行Python代码,免除了最麻烦的部分。&/b&&/p&&p&不管是知乎还是StackOverflow,几乎所有编程版块的问题,都有一大半是关于安装、配置的。而云计算已经很普及,实在想在本地搭建也可以用docker解决,我觉得没有必要在繁琐的配置上浪费太多时间。 &br&&/p&&p&以上三篇可以说是撩拨的前戏,本篇《图解张量(内有恶猫!)》终于直奔主题顶到了花心。&/p&&br&&br&&h2&&b&&img src=&/v2-7ea2a145f4587abfa173_b.png& data-rawwidth=&1236& data-rawheight=&880& class=&origin_image zh-lightbox-thumb& width=&1236& data-original=&/v2-7ea2a145f4587abfa173_r.png&& 正文&/b&&br&&/h2&&p&可能你已经下载&a href=&/?target=https%3A//www.tensorflow.org/tutorials/mnist/beginners/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TensorFlow&i class=&icon-external&&&/i&&/a&并且准备好开始深度学习了。&/p&&p&&b&但你可能会问:什么他妈的叫他妈的Tensor? (What the hell is a tensor?)&/b&&/p&&img src=&/v2-fd66f3aeee2de66cf1eaefa_b.jpg& data-rawwidth=&580& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/v2-fd66f3aeee2de66cf1eaefa_r.jpg&&&br&&p&或许你已经看过了&a href=&/?target=https%3A//en.wikipedia.org/wiki/Tensor& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&维基百科&i class=&icon-external&&&/i&&/a&页面 ,然后你更加迷茫了。又可能你看过了了这个&a href=&/?target=https%3A//www.grc.nasa.gov/www/k-12/Numbers/Math/documents/Tensors_TM.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NASA tutorial&i class=&icon-external&&&/i&&/a&但还是不知道这说了些什么? 你像陈绮贞老师,收集书本里每一句你最爱的真理。&/p&&p&问题的关键在于,大多数教程在谈及Tensor的时候,都预设你已经懂得了所有描述性的数学语言。&/p&&p&不要怕!&/p&&p&我想很多孩子一样讨厌数学,所以要是连我都能能懂,那你也可以!我们只需要用最简单的方式来解释一切。&/p&&p&所以到底什么他妈的叫他妈的Tensor,它又怎么就Flow了?&/p&&br&&br&&h2&&b&Tensors = Containers(张量是个筐)&/b&&/h2&&p&张量(tensor)是现代机器学习的最基础元素。&/p&&p&本质上来讲,张量就是个数据容器。多数情况下盛的是数字,有时也会盛字符但比较少。&/p&&p&&b&所以不妨把它想象成一筐数字 。(&/b&&b&&b&So think of it as a bucket of numbers. bucket原意是“桶”,但中文还是“筐”&/b&用的比较多。比如“国情是个筐”,而没有说“国情是个桶”的。)&/b&&br&&/p&&p&张量就像避孕套,有不同的型号(这个比喻是Kaiser自创的)。来一起认识一下你在深度学习中将会遇到的基本款——0维到5维。&/p&&p&我们可以把这些张量做如下可视化(猫 在后面!)&br&&/p&&br&&img src=&/v2-dd754b97bdad3bb8cb1e3b_b.jpg& data-rawwidth=&2000& data-rawheight=&1304& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-dd754b97bdad3bb8cb1e3b_r.jpg&&&br&&h2&&b&0维张量/标量&/b&&/h2&&p&张量这个筐里的一个数字就叫标量(scalar)。&/p&&p&&b&一个标量就是一个数字。&/b&&br&&/p&&p& 你可能会问,为什么不直接叫数字?&/p&&p&我也不知道,可能数学家们觉得这样挺起来比较屌?(并没有)&br&&/p&&br&&p&实际上你可以拥有只含一个数字的张量,这就是0维张量,好比一个筐里只有一滴水(已经好过“竹篮子打水一场空”了)。&/p&&p&在本教程中我们将使用Python, Keras和TensorFlow以及NumPy,这些环境已经在&a href=&/?target=https%3A//jizhi.im/blog/post/learning_ai_suck_math_04& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&集智&i class=&icon-external&&&/i&&/a&中搭建好了。 &br&&/p&&p& 在Python中,张量一般表示为Numpy数组。 &a href=&/?target=http%3A//www.numpy.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NumPy&i class=&icon-external&&&/i&&/a& 是一个科学计算库, 你球基本上所有AI框架都用到了NumPy。&/p&&p&&img src=&/v2-c608fddd3b266f_b.png& data-rawwidth=&1334& data-rawheight=&594& class=&origin_image zh-lightbox-thumb& width=&1334& data-original=&/v2-c608fddd3b266f_r.png&&&br&在数据科学竞赛网站Kaggle上,你经常可以看到Jupyter Notebooks(本站的在线开发环境也是基于Jupyter Notebooks)提到把数据转换为Numpy数组。Jupyter Notebook集成了文档与代码功能,融讲解和编程于一体。&br&&br&为什么要把数据转换为Numpy数组?&br&&br&很简单,因为我们需要应对各种各样的输入数据——字符、图像、股价或者视频——整合到一个标准下。&br&&br&这种情况下,我们把数据塞进“数字筐”(张量)里,才能通过TensorFlow操纵它们。&br&&br&其实就是把数据组织成一种可用的格式。在网络编程中,你可能用XML来呈现(微信就是),所以你可以快捷地定义和操纵数据。同样的,深度学习中我们使用张量这个筐来作为乐高里最小的零件。&/p&&br&&br&&h2&&b&1维张量/矢量&/b&&/h2&&p&如果你是程序员,那你应该已经知道一种跟1维张量很接近的东西:数组。&/p&&p&每个编程语言都有数组,其实就是一行或一列数据。在深度学习中称作1维张量,张量可以根据轴的数量来定义,1维张量就只有一个数轴。&/p&&p&&b&1维张量是矢量(vector)。&/b&&/p&&br&&p&我们可以把矢量可视化为一行或一列数字。&br&&/p&&br&&img src=&/v2-c58ffa89d_b.jpg& data-rawwidth=&89& data-rawheight=&500& class=&content_image& width=&89&&&br&&p&如果想在Numpy中查看,可执行如下操作:&/p&&p&也可以用Numpy的&b&ndim&/b&输出张量的维数。&br&&/p&&img src=&/v2-260aaaea1faad53e9e12f69_b.png& data-rawwidth=&1330& data-rawheight=&726& class=&origin_image zh-lightbox-thumb& width=&1330& data-original=&/v2-260aaaea1faad53e9e12f69_r.png&&&h3&&b&2维张量&/b&&/h3&&p&你大概已经想到了另一种张量:&b&矩阵 &/b&&/p&&p&&b&2维向量是矩阵(matrix)。&/b&&/p&&br&&p&不,不是基努里维斯那个电影,是类似Excel表格的这样一个数据结构。&br&&/p&&br&&img src=&/v2-5bd5fcfe9f4_b.jpg& data-rawwidth=&587& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&587& data-original=&/v2-5bd5fcfe9f4_r.jpg&&&br&&p&我们可以将其可视化为有行/列的数字网格。&/p&&p&行和列代表了两个轴,矩阵是2维张量。在NumPy中我们可以如此表示:&/p&&img src=&/v2-fe2f1be99fe8c00b274405dfc6ff89fa_b.png& data-rawwidth=&1338& data-rawheight=&788& class=&origin_image zh-lightbox-thumb& width=&1338& data-original=&/v2-fe2f1be99fe8c00b274405dfc6ff89fa_r.png&&&p&我们可以把人物属性存储为2维张量。比如一个典型的邮件列表就很适用。&/p&&p&假设我们有10000个人,并且每个人又具有这些属性:&/p&&ul&&li&姓&/li&&li&名&br&&/li&&li&街道&br&&/li&&li&市&br&&/li&&li&省&br&&/li&&li&国家&/li&&li&邮编&/li&&/ul&&p&张量是有“形状”的,“形状”适合数据维度且定义了张量最大尺寸,我们可以把人物属性放入一&/p&&p&个形状为(10000, 7)的2维张量当中。&/p&&p&你可能想说这个张量有10000列和7行。&/p&&p&やめて。&/p&&p&张量的行与列之间是可以相互转换的(所以不存在具体的“行”与“列”的定义)。&br&&/p&&br&&h2&&b&3维张量&/b&&/h2&&p&其实到了3维,才是“张量”这个概念真正凸显的时候。我们经常需要把2维张量再装进另一个筐里,这就是3维张量。&/p&&p&在Numpy中,可以这样表示:&br&&/p&&img src=&/v2-6de8f1095886dadd676bd_b.png& data-rawwidth=&1332& data-rawheight=&1488& class=&origin_image zh-lightbox-thumb& width=&1332& data-original=&/v2-6de8f1095886dadd676bd_r.png&&&br&&p&以上面的邮件列表为例。假设现在有10个邮件列表,我们可以把2维张量存至另一个筐,构成3维张量。形状如下:&br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&n&&number_of_mailing_lists&/span&&span class=&p&&,&/span& &span class=&n&&number_of_people&/span&&span class=&p&&,&/span& &span class=&n&&number_of_characteristics_per_person&/span&&span class=&p&&)&/span&
&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&mi&&10000&/span&&span class=&p&&,&/span&&span class=&mi&&7&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&b&你可能已经猜到了, 3维张量是数字立方。&/b&&/p&&img src=&/v2-6f273c2bceab21d6557fcd217d4bcc82_b.jpg& data-rawwidth=&500& data-rawheight=&281& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/v2-6f273c2bceab21d6557fcd217d4bcc82_r.jpg&&&p&我们可以继续堆砌立方体来构建越来越大的张量,以表现4维,5维乃至N维的张量。 &br&&/p&&p&实际上3维张量可以更好地用层级网格来表示:&/p&&img src=&/v2-5c98aabbc229d0d00ce91f97e0b1a0a5_b.jpg& data-rawwidth=&631& data-rawheight=&504& class=&origin_image zh-lightbox-thumb& width=&631& data-original=&/v2-5c98aabbc229d0d00ce91f97e0b1a0a5_r.jpg&&&h2&&b&常见张量型数据&/b&&br&&/h2&&p&有几类常见的数据类型是以张量形式存储的:&/p&&ul&&li&3D = 时间序列&/li&&li&4D = 图像&br&&/li&&li&5D = 视频&/li&&/ul&&p&一条贯穿所有这些张量的线索就是“样本数量”。样本数量就是数据集里的数据个数,可以是图片的张数,视频的段数,文件的份数或是微博的条数。&/p&&p&一般实际的数据维数都会比样本数量小。&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&rest_of_dimensions&/span& &span class=&o&&-&/span& &span class=&n&&sample_size&/span& &span class=&o&&=&/span& &span class=&n&&actual_dimensions_of_data&/span&
&/code&&/pre&&/div&&br&&p&考虑到不同维数下的形状(以不同的维度代表),我们要寻找能够描述数据的最少维度。&/p&&p&所以4维张量通常存储图像,因为样本数量就是张量的第4个维度。&/p&&p&比如一张图片可以用3个维度来表征:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&n&&width&/span&&span class=&p&&,&/span& &span class=&n&&height&/span&&span class=&p&&,&/span& &span class=&n&&color_depth&/span&&span class=&p&&)&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&n&&D&/span&
&/code&&/pre&&/div&&br&&p&但在机器学习中,我们一般不是只跟单张图片或单份文件打交道,而是一个数据集。我们可能有10000张郁金香的照片,这就是一个4维张量:&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&n&&sample_size&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&,&/span& &span class=&n&&height&/span&&span class=&p&&,&/span& &span class=&n&&color_depth&/span&&span class=&p&&)&/span& &span class=&o&&=&/span& &span class=&mi&&4&/span&&span class=&n&&D&/span&
&/code&&/pre&&/div&&p& 下面来看几个不同维度张量的例子。&/p&&br&&h2&&b&时序数据&br&&/b&&/h2&&p&3维张量对于时序数据很有效。&/p&&br&&h2&医学影像&/h2&&p&我们可以把脑电波EEG信号编码为3维张量,因为它可以用3个参数指代:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&n&&time&/span&&span class=&p&&,&/span& &span class=&n&&frequency&/span&&span class=&p&&,&/span& &span class=&n&&channel&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&转换过程大致如下:&/p&&p&&img src=&/v2-f7dd0fe5aa_b.jpg& data-rawwidth=&2000& data-rawheight=&510& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-f7dd0fe5aa_r.jpg&& 现在如果我们有很多病人扫描了脑电波,那就变成个4维张量了。&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&n&&sample_size&/span&&span class=&p&&,&/span& &span class=&n&&time&/span&&span class=&p&&,&/span& &span class=&n&&frequency&/span&&span class=&p&&,&/span& &span class=&n&&channel&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&img src=&/v2-51bf5be6b1cc49dc19688_b.jpg& data-rawwidth=&580& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/v2-51bf5be6b1cc49dc19688_r.jpg&&&br&&h2&股价&/h2&&p&股价每分钟都有高有低,有最终价。纽交所从上午9:30开到下午4:00,共计6个半小时,390分钟。 股价的变化一般用K线图表示:&/p&&img src=&/v2-9fb12e4426_b.png& data-rawwidth=&482& data-rawheight=&290& class=&origin_image zh-lightbox-thumb& width=&482& data-original=&/v2-9fb12e4426_r.png&&&br&&br&&p&我们可以把每分钟的高价,低价,最终价存为2维张量。如果抓取一星期(5个交易日),就是3维张量,形状如下:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&n&&week_of_data&/span&&span class=&p&&,&/span& &span class=&n&&minutes&/span&&span class=&p&&,&/span& &span class=&n&&high_low_price&/span&&span class=&err&&)&/span&
&span class=&p&&(&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&mi&&390&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&如果有10支股票,则变成4维张量:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&mi&&390&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&假设现在有个互惠基金,由若干支股票组成,以4维张量形式表征。我们可以持有25支互惠基金作为投资组合,于是就有一系列4维张量,等价于5维张量:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&mi&&25&/span&&span class=&p&&,&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&mi&&5&/span&&span class=&p&&,&/span&&span class=&mi&&390&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&img src=&/v2-936ebd124d_b.png& data-rawwidth=&1894& data-rawheight=&1062& class=&origin_image zh-lightbox-thumb& width=&1894& data-original=&/v2-936ebd124d_r.png&&&br&&br&&h2&文本数据 &/h2&&p&文本数据也可以存为3维张量,以Twitter为例。&/p&&p&Tweets由140字组成,基于UTF-8标准,可以呈现上百万字,但实际上我们只对前128个感兴趣,与ASCII编码是一样的。单条tweet可以装载进一个(140,128)的2维矢量。&/p&&p&&br&假如我们下载了100万条Trump的tweets(我觉得他一个礼拜就发够了。注:此条吐槽为原文),可以存为3维张量。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(number_of_tweets_captured, tweet, character)
&/code&&/pre&&/div&&img src=&/v2-94e88a9df0fe0c178c071_b.jpg& data-rawwidth=&767& data-rawheight=&347& class=&origin_image zh-lightbox-thumb& width=&767& data-original=&/v2-94e88a9df0fe0c178c071_r.jpg&&&br&&h2&&b&图像&/b&&br&&/h2&&p&4维张量很适合存储一系列图像(如Jpeg格式)。如前所述,一张图片可以存为三个参数:&/p&&ul&&li&宽&br&&/li&&li&高&br&&/li&&li&色彩深度&br&&/li&&/ul&&p&单张图片是3维的,一系列图片就是4维的了,第4维就是sample_size。 &/p&&p&著名的MNIST数据集就是一系列手写数字,曾经是困扰众多数据科学家的难题,今天已经基本上是玩儿透了,机器已经能够达到99%甚至更高的精度(单层CNN就差不多了)。 但是这个数据集仍然发挥着余热,就是用作新机器学习应用的样板,或者练手的素材。&/p&&br&&img src=&/v2-134d28ed53635ccfee24617e_b.png& data-rawwidth=&530& data-rawheight=&297& class=&origin_image zh-lightbox-thumb& width=&530& data-original=&/v2-134d28ed53635ccfee24617e_r.png&&&br&&p&Keras甚至集成了MNIST数据集,只需要简单的命令就可以导入。 &br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&keras.datasets&/span& &span class=&kn&&import&/span& &span class=&n&&mnist&/span&
&span class=&p&&(&/span&&span class=&n&&train_images&/span&&span class=&p&&,&/span& &span class=&n&&train_labels&/span&&span class=&p&&),&/span& &span class=&p&&(&/span&&span class=&n&&test_images&/span&&span class=&p&&,&/span& &span class=&n&&test_labels&/span&&span class=&p&&)&/span& &span class=&o&&=&/span& &span class=&n&&mnist&/span&&span class=&o&&.&/span&&span class=&n&&load_data&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&br&&p&数据集被分为两份:&/p&&br&&ul&&li&训练集&/li&&li&测试集&br&&/li&&/ul&&p&每个图片都有一个标签,即该图的真实数字,比如3,7或是9,这些标签时人工手动添加的。 &br&&/p&&p&训练集用来教会神经网络,测试集则是神经网络学习后试图分类的目标。 &br&&/p&&br&&p&MNIST都是灰度图像,也就是说可以编码为2维张量,但是所有图片还是依照惯例编码为3维张量,第三个轴代表色彩深度。 &/p&&p&MNIST数据集中有60000张图片,每张长宽皆为28像素,色彩深度为1,即灰度图片。&/p&&p&TensorFlow是这样存储图片的&b&(与Theano格式有所不同)&/b&:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(sample_size, height, width, color_depth).
&/code&&/pre&&/div&&h2&彩图&/h2&&p&彩色照片有着不同的色彩深度,这取决于分辨率和编码格式。典型的JPG图像用RGB编码,所以色彩深度为3,分别代表红、绿、蓝。&/p&&p&这是我家猫Dove的照片,分辨率为750x750,这意味着我们会有个3维张量:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&mi&&750&/span&&span class=&p&&,&/span&&span class=&mi&&750&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&img src=&/v2-577c5dbbeb1f6c8035921e_b.jpg& data-rawwidth=&751& data-rawheight=&750& class=&origin_image zh-lightbox-thumb& width=&751& data-original=&/v2-577c5dbbeb1f6c8035921e_r.jpg&&接下来我家Dove会被变成一系列冷冰冰的张量和公式,就像是在神经网络中“变形”,或是“流动”(Flow)。 &br&&/p&&img src=&/v2-e841abfb8e9f8598fcba4aeb754bd52b_b.jpg& data-rawwidth=&2000& data-rawheight=&739& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-e841abfb8e9f8598fcba4aeb754bd52b_r.jpg&&&p&假设我们有一堆各种猫的图片(尽管他们都没有Dove漂亮。注:原作者看来是个猫奴)。比如10000张别家猫的750x750照片。在Keras中,就这样定义为4维张量: &br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&mi&&10000&/span&&span class=&p&&,&/span&&span class=&mi&&750&/span&&span class=&p&&,&/span&&span class=&mi&&750&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&img src=&/v2-3e9da277aa5_b.jpg& data-rawwidth=&2000& data-rawheight=&956& class=&origin_image zh-lightbox-thumb& width=&2000& data-original=&/v2-3e9da277aa5_r.jpg&&&br&&br&&h3&5维张量&/h3&&p&5维张量可以存视频数据。在TensorFlow中视频数据的编码形式如下: &br&&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&sample_size&/span&&span class=&p&&,&/span& &span class=&n&&frames&/span&&span class=&p&&,&/span& &span class=&n&&width&/span&&span class=&p&&,&/span& &span class=&n&&height&/span&&span class=&p&&,&/span& &span class=&n&&color_depth&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&一个5分钟的视频(300秒),1080p高清(像素),每秒15个关键帧,色彩深度3,这是一个4维张量: &br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&mi&&4500&/span&&span class=&p&&,&/span&&span class=&mi&&1920&/span&&span class=&p&&,&/span&&span class=&mi&&1080&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&张量的第五个维度是视频集中的视频个数。所以如果有10个视频,就有5维张量:&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&p&&(&/span&&span class=&mi&&10&/span&&span class=&p&&,&/span&&span class=&mi&&4500&/span&&span class=&p&&,&/span&&span class=&mi&&1920&/span&&span class=&p&&,&/span&&span class=&mi&&1080&/span&&span class=&p&&,&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&b&这个例子其实很疯狂。&/b&&/p&&p&&b&张量的体积可以大的不可思议, 超过1TB。&/b&在现实世界中,我们想要尽可能地下采样视频,否则模型可能永远都训练不完。&br&&/p&&p&5维张量的值的个数为:&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&mi&&10&/span& &span class=&n&&x&/span& &span class=&mi&&4500&/span& &span class=&n&&x&/span& &span class=&mi&&1920&/span& &span class=&n&&x&/span& &span class=&mi&&1080&/span& &span class=&n&&x&/span& &span class=&mi&&3&/span& &span class=&o&&=&/span& &span class=&mi&&279&/span&&span class=&p&&,&/span&&span class=&mi&&936&/span&&span class=&p&&,&/span&&span class=&mo&&000&/span&&span class=&p&&,&/span&&span class=&mo&&000&/span&
&/code&&/pre&&/div&&p&Keras允许使用32位或64位的浮点数(dtype):&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&n&&float32&/span&
&span class=&n&&float64&/span&
&/code&&/pre&&/div&&p&每个值都是一个32位的数字,这就意味着我们要把值的个数在撑32,转换为比特数,再转换为TB:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&mi&&279&/span&&span class=&p&&,&/span&&span class=&mi&&936&/span&&span class=&p&&,&/span&&span class=&mo&&000&/span&&span class=&p&&,&/span&&span class=&mo&&000&/span& &span class=&n&&x&/span& &span class=&mi&&32&/span& &span class=&o&&=&/span& &span class=&mi&&8&/span&&span class=&p&&,&/span&&span class=&mi&&957&/span&&span class=&p&&,&/span&&span class=&mi&&952&/span&&span class=&p&&,&/span&&span class=&mo&&000&/span&&span class=&p&&,&/span&&span class=&mo&&000&/span&
&/code&&/pre&&/div&&img src=&/v2-83a5d2d19e66d1b5c44a83_b.jpg& data-rawwidth=&478& data-rawheight=&155& class=&origin_image zh-lightbox-thumb& width=&478& data-original=&/v2-83a5d2d19e66d1b5c44a83_r.jpg&&&p& 我不觉得这适用于32位系统(我会再找人算算),所以还是需要下采样。&/p&&p&实际上我用这个疯狂的例子,是为了引出&b&&a href=&/?target=https%3A//en.wikipedia.org/wiki/Data_pre-processing& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&预处理&i class=&icon-external&&&/i&&/a&&/b&和&b&&a href=&/?target=https%3A//en.wikipedia.org/wiki/Data_reduction& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据缩减&i class=&icon-external&&&/i&&/a&。&/b&&/p&&br&&p&你不能直接就把原始数据扔进AI模型中,你需要整理、压缩数据使其更易于处理。&/p&&p&降低分辨率、删减冗余数据、限制帧数等,这也是数据科学家的任务之一。&br&&/p&&p&如果你不能把数据玩儿坏,那么你也不能把它玩儿好。&/p&&br&&br&&h2&结语&/h2&&p&现在你应该对张量及相关的数据类型有了更好的理解。&/p&&p&再下一篇中,我们将学习如何用数学方法对张量进行变形。 &/p&&p&换言之,我们要让Tensor &flow& 起来。&/p&
原文: 在线运行代码版: 作者:翻译/注释:Kaiser()前言昨天翻译了一篇用Keras识别AV女优的文…
&img src=&/50/v2-334fdfcadc5da9fbdfc937d_b.jpg& data-rawwidth=&1092& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1092& data-original=&/50/v2-334fdfcadc5da9fbdfc937d_r.jpg&&写在前面: 接触 Django 和 Python 也不过1个月的时间,原来是惯用Matlab建模,其他语言基本一窍不通。编程工龄2年,前端经验为0。目前的水平还只是能实现网页的一些基本功能,继续学习中,目标是完成一个产品展示用demo。&p&刚刚转战Python时觉得是一个神坑,看到 js 各种插件只能一脸蒙蔽,一个月过去终于感到适应了。所以这份笔记仅仅作为
Django快速入门,里面也许会涉及一些小白到不能再小白的细节,请原谅这些对于萌新时期的我,都曾经是大山一样的存在。再就是里面可能出现的Python语句,仅仅是可以实现其功能,如有更简洁的代码,跪求指出!!&/p&&p&&b&工具&/b&&b&:&/b&Anaconda 3,Django 1.10,Mysql,notepad&/p&&p&&b&语言:&/b&Python,JS,CSS,Jquery,Ajax (都是现学现用,并没有深入研究)&/p&&p&&b&参考资料:&/b&&a href=&/?target=https%3A///en/1.10/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Django documentation&i class=&icon-external&&&/i&&/a&(官网英文1.10)&/p&&p&&a href=&/?target=http%3A///django/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Django 1.8.2 (中文)&i class=&icon-external&&&/i&&/a&(中文版只找到1.8的版本,有些命令还是有改动,新版示例的操作顺序也做了调整,不想通篇做英文阅读理解的,可以用来做参考,但还是以新版为准)&/p&&p&
准备工作差不多就是这些,一些扩展用的绘图包,UI组件会在使用前注明,如有更好的工具,欢迎推荐!!&/p&&br&&br&&br&&p&&b&补充说明:刚接触Python的新手,建议使用Python的IDE,这里推荐的有Anaconda和Pycharm。&/b&&/p&&p&&b&Anaconda:&/b&Python的科学学计算的集成,预装了很多第三方库,新手可以直接使用里面的Spyder编程。好处是,正版免费。&/p&&p&&b&Pycharm:&/b&提示功能非常强大,使用起来方便了很多,但是需要激活码。&/p&&br&&p&使用Django的过程中,你需要同时打开Python 和 cmd 命令窗口,以及网页编辑器&/p&&p&&b&.py 类型文件,需要用Python打开。&/b&&/p&&p&&b&命令窗口指令,统一在前面加了 $ 标识,复制代码时,不要复制$&/b&&/p&&p&&b&.html 类型文件,在前面加了%标识,可以使用notepad编辑,或者使用webstorm,这两个都比较顺手。&/b&&/p&&br&&p&&b&一、安装Django(windows系统)&/b&&/p&&p&
运行cmd进入命令窗口,输入:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ pip install Django==1.10.5
&/code&&/pre&&/div&&p&&b&以后命令窗口会经常使用,代码前均加入 $ 标示,使用前记得删除!!&/b&&/p&&p&
回车等待安装完成。&/p&&p&(回到Python里,输入以下代码,返回1.10,则说明安装成功)&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&&& import django
&&& print(django.get_version())
&/code&&/pre&&/div&&br&&p&&b&二、创建工作文件夹&/b&&/p&&p&
我的工作文件夹设在 &F:\web1&,利用cd 命令进入所在位置&/p&&img src=&/v2-cc7f3d36b70d73ef6ec9391_b.png& data-rawwidth=&218& data-rawheight=&110& class=&content_image& width=&218&&&p&
执行以下代码&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ django-admin startproject mysite001
&/code&&/pre&&/div&&p&
打开计算机就能看到 “F:\web1\mysite001” 生成了指定的文件夹mysite001,并且里面包含了一些初始化的文件。&/p&&p&
一个网站可以有很多的模块,以百度为例,有网页,有地图,有贴吧,每个模块的功能都相对独立,可以将它们看成一个一个的独立app,共同组成了mysite001这个项目。&/p&&p&
因此我们需要创建每个app的文件夹,如下图。&/p&&img src=&/v2-337c462edb0db_b.png& data-rawwidth=&526& data-rawheight=&125& class=&origin_image zh-lightbox-thumb& width=&526& data-original=&/v2-337c462edb0db_r.png&&&p&
上图的解释:cd命令进入mysite001文件夹,调用里面的manage.py文件,执行命令&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ python manage.py startapp app001
&/code&&/pre&&/div&&p&
于是,你再打开“F:\web1\mysite001”,就会发现里面多了一个叫做app001的文件夹。&/p&&p&&img src=&/v2-af404a91951fdf2aec1fca69_b.png& data-rawwidth=&672& data-rawheight=&259& class=&origin_image zh-lightbox-thumb& width=&672& data-original=&/v2-af404a91951fdf2aec1fca69_r.png&&这里,稍作解释:&/p&&p&app001,存放指定app的文件夹&/p&&p&mysite001,管理整个web的文件夹,web内容目前包含了一个app001&/p&&p&manage.py,是django-admin的一个小包装,调用manage.py可以非常方便得执行诸如,新建APP,启动服务器等命令,在以后调试的时候我们会经常用到。&/p&&p&&b&注意,在命令行语句中,用到 $ Python manage.py XXXX 命令开头的,都需要cd到 manage.py 文件所在文件夹位置,才能运行&/b&&/p&&br&&br&&p&&b&三、必要的设置&/b&&/p&&p&在正式编写我们的网站之前,我们还需要为网站结构做一些准备。&/p&&p&&b&新建两个文件夹:static 和 templates&/b&&/p&&p&&img src=&/v2-e374a12ac70eeda8c60cfb5_b.png& data-rawwidth=&588& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&588& data-original=&/v2-e374a12ac70eeda8c60cfb5_r.png&&&b&1. static &/b&&/p&&p&用于存放html&head&引入的css类,js类等文件,以及图片,声音等静态文件。&/p&&p&大部分网页共用的静态文件可以直接存放在static目录下,如app001特别使用的文件,建议在static下新建文件夹app001单独存放。&/p&&p&也可以下设image,sound等文件夹,专门管理某一类别的文件。&/p&&p&&b&这么做的目的显而易见,方便管理!!&/b&对于一个大型的网站项目,如果你不想在上百个文件堆里大海捞针的话,从最开始就把文件分类保存。&/p&&p&&b&2. templates&/b&&/p&&p&用于存放html类文件,同样的为每个app新建一个文件夹。&/p&&br&&p&&b&做完以上,我们的网站还只是一个空架子。下面需要将各个组件之间的联系,告诉Django。&/b&&/p&&p&&b&打开“\mysite001\mysite001\settings.py”&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&INSTALLED_APPS = [
'app001.apps.App001Config', # 增加app声明
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
&/code&&/pre&&/div&&p&新增代码段通俗解释,告诉Django,涉及app001的指令,去到app001文件夹寻找。&/p&&p&注意App001Config,开头字母大写。&/p&&p&(app001文件夹中已经生成了一个apps.py文件,并定义了一个类App001Config。以上这些Django都帮我们做好了,无需重复劳动)&/p&&p&&b&补充templates关联设置&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS':[os.path.join(BASE_DIR, 'templates/'),],# 新增代码
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
&/code&&/pre&&/div&&p&新增代码段解释,告诉Django,templates文件夹位置。&/p&&p&&b&修改系统时间为北京(上海)时间&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&TIME_ZONE = 'Asia/Shanghai'
&/code&&/pre&&/div&&p&&b&补充static关联设置&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, &static&),
]# 新增代码
&/code&&/pre&&/div&&p&新增代码段解释,告诉Django,涉及{% load static %}命令,去static文件夹寻找。&/p&&p&&b&由于本章节还涉及不到数据库的使用内容,这里我们增加一段代码,将用户信息保存在缓存。&/b&&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&SESSION_ENGINE ='django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS= 'default'
&/code&&/pre&&/div&&br&&p&&b&分配好各个文件夹的路径,下面我们需要对网站的地址(url)进行统一调度。&/b&&/p&&p&打开“mysite001\mysite001\urls.py”&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from django.conf.urls import url,include # 增加 include
from django.contrib import admin
urlpatterns = [
url(r'^app001',include('app001.urls')), # 增加对应关系
url(r'^admin/', admin.site.urls),
&/code&&/pre&&/div&&p&以上新增的代码包含了一段正则表达式 r'^app001',符号 ^ 表示头部匹配。整段语句表示,若网站地址为&&a href=&/?target=http%3A//XXXXX/app001& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&XXXXX/app001&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&……& ,则该地址分配到&app001/urls.py&文件来处理。&/p&&p&此时”app001/urls.py”目录下还没有这个文件,我们需要新建这个文件,来处理后续。&br&&/p&&br&&br&&p&&b&四、第一个简单的App&/b&&/p&&p&(接上文)新建”app001/urls.py”&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from django.conf.urls import url
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns =[
url(r'^$',views.index1,name='index1'), # 建立地址和视图的关联
]+static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
&/code&&/pre&&/div&&p&这里,我们又看到了一个正则表达式 r'^$' ,分配到app001的url地址,再和 r'^$' 匹配。符号 $ 表示尾部匹配,再加上符号 ^ (头部匹配),^$表示匹配首页。&/p&&p&这里我们建立了一个url和view的关系,即在首页地址“&a href=&/?target=http%3A//XXX/app001& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&XXX/app001&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&”页面上显示视图index1。&/p&&p&最后为了方便管理,将这个首页的url命名为index1。这样,在html引用地址时,可以避免“&a href=&/?target=http%3A//xxx& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&xxx&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&……”的硬编码,而是采用{% url ‘index1’ %}的形式,灵活得管理。&/p&&br&&p&我们在”app001/urls.py”文件中建立了首页与index1视图的关系,但index1视图还未定义。打开“app001/views.py”:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&from django.shortcuts import render
def index1(request): #定义视图index1
ans={} #创建一个字典
ans['head']='hello world' # 赋值
return render(request,'app001/firstpage.html',ans) # 输出字典
&/code&&/pre&&/div&&p&上面代码的含义就是定义一个index1,向'templates/app001/firstpage.html'输出字典ans的值。&/p&&p&新建 'templates/app001/firstpage.html',编写一个最简单的html,&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&% {{head}}
&/code&&/pre&&/div&&p&&b&为了区分html,代码前面统一添加%,使用前记得删除。&/b&&/p&&br&{{}}是Django自带的服务器语言,表示提取双括号内变量的值。这里我们是提取ans['head']的值。&br&&br&&p&&b&五、运行服务器&/b&&/p&&p&好了,现在让我们将本机作为服务器,看看我们的网站吧&/p&&p&&img src=&/v2-78cf8f185d9b637a7ff9ac_b.png& data-rawwidth=&832& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&832& data-original=&/v2-78cf8f185d9b637a7ff9ac_r.png&&调用manage.py,运行代码&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&$ python manage.py runserver
&/code&&/pre&&/div&&p&我们的服务器地址在“&a href=&/?target=http%3A//127.0.0.1%3A8000/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&127.0.0.1:8000/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&”&/p&&p&在浏览器地址栏输入地址“&a href=&/?target=http%3A//127.0.0.1%3A8000/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&127.0.0.1:8000/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&app001”&/p&&br&&br&&p&&img src=&/v2-5ccfabc24f0cb_b.png& data-rawwidth=&445& data-rawheight=&336& class=&origin_image zh-lightbox-thumb& width=&445& data-original=&/v2-5ccfabc24f0cb_r.png&&铛铛铛铛~~完成~~&/p&&br&&p&总结一下Django各个模块的作用:&/p&&p&urls 负责 分配网页地址给views&/p&&p&views负责 传递变量给templates&/p&&p&templates收到变量值,展示给访客&/p&&br&&p&好了,今天的笔记就到这里,希望对你有用。&/p&&p&&b&最后补充一个小贴士,想要玩熟Django,不作废几个APP哪能行!!&/b&&/p&
写在前面: 接触 Django 和 Python 也不过1个月的时间,原来是惯用Matlab建模,其他语言基本一窍不通。编程工龄2年,前端经验为0。目前的水平还只是能实现网页的一些基本功能,继续学习中,目标是完成一个产品展示用demo。刚刚转战Python时觉得是一个神坑,…
我们讲二叉树啊,平衡树的旋转啊,费了那么多劲,目的就是为了引出今天的主题:红黑树。红黑树是JDK中最重要的一个树型数据结构。TreeSet, TreeMap,以及最新的Hashtable都使用了红黑树。&p&红黑树在各种框架,开源软件,系统中十分常见。比如在linux源代码中,就有使用红黑树做为容器管理进程的代码,再比如C++的STL中,Set, Map都是使用红黑树实现的。但是红黑树不光在教材里很少出现,即使在各类博客,教程也很少出现。我觉得这可能是因为红黑树的规则太复杂所导致的。&/p&&p&实际上,大家接下来会看到,我的讲解虽然看上去很啰嗦,很可怕,但在JDK里,红黑树的代码十分简洁。我们先看原理。&/p&&h2&定义和性质&/h2&&p&红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在STL中,很多部分(目前包括set,multiset,map, multimap)应用了红黑树。它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(logn)时间内做查找,插入和删除等操作。&/p&&p&与二叉查找树相比,红黑树的树结点多了一个颜色属性,而每个结点不是黑色即是红色。这就是红黑树名称的由来。树的每个节点是一个五元组:color(颜色),key(数据), left(左孩子),right(右孩子)和parent(父结点)。注意哦,红黑树是一种平衡树,但是结点的结构却出奇的简单,比起传统二叉树,只多了颜色而已。&/p&&p&红黑树具有以下性质:&br&&/p&&ol&&li&根是黑色&br&&/li&&li&所有叶子都是黑色(叶子是NIL结点)&/li&&li&如果一个结点是红的,则它的两个儿子都是黑的&/li&&li&从任一结点到其叶子的所有简单路径都包含相同数目的黑色结点&/li&&/ol&&p&总结起来,最重要的就是红色结点不能有红色孩子,从根到任意叶子,经过的黑色结点数目相等。&/p&&h2&插入数据&/h2&&p&红黑树从根本上说还是排序二叉树,因此,红黑树的查找操作与二叉排序树的查找操作是一致的。&/p&&p&向红黑树中插入新的结点。具体做法是,将新结点的 color 赋为红色,然后以二叉排序树的插入方法插入到红黑树中去。之所以将新插入的结点的颜色赋为红色,是因为:如果设为黑色,就会导致根到叶子的路径上有一条路上,多一个额外的黑结点,这个是很难调整的。但是设为红色结点后,可能会导致出现两个连续红色结点的冲突,那么可以通过颜色调换和树旋转来调整,这样简单多了。&/p&&p&接下来,讨论一下插入以后,红黑树的情况。设要插入的结点为N,其父结点为P,其 祖父结点为G,其父亲的兄弟结点为U(即P和U 是同一个结点的两个子结点)。如果P是黑色的,则整棵树不必调整就已经满足了红黑树的所有性质。如果P是红色的(可知,其父结点G一定是黑色的),则插入N后,违背了红色结点只能有黑色孩子的性质,需要进行调整。&/p&&p&调整时分以下三种情况:&/p&&p&第一、N的叔叔U是红色的。将P和U重绘为黑色并重绘结点G为红色。现在新结点N有 了一个黑色的父结点P,因为通过父结点P或叔父结点U的任何路径都必定通过祖父结点G, 在这些路径上的黑结点数目没有改变。但是,红色的祖父结点G的父结点也有可能是红色 的,这就违反了性质3。为了解决这个问题,我们在祖父结点G递归向上调整颜色。如图2.14&/p&&img src=&/v2-cda77a7b46cfcec8cb7692_b.png& data-rawwidth=&1714& data-rawheight=&651& class=&origin_image zh-lightbox-thumb& width=&1714& data-original=&/v2-cda77a7b46cfcec8cb7692_r.png&&&p&第二、N的叔叔U是黑色的,且N是左孩子。对祖父结点G 的一次右旋转; 在旋转产生的树中,以前的父结点P现在是新结点N和以前的祖父节点 G 的父结点,然后交换以前的父结点P和祖父结点G的颜色,结果仍满足红黑树性质。如图 2.15。在(b)中,虚线代表原来的指针,实线代表旋转过后的指针。所谓旋转就是改变图中所示的两个指针的值即可。当然,在实际应用中,还有父指针p也需要修改,这里为了图示的简洁而省略掉了。&/p&&img src=&/v2-cccf54143b9b_b.png& data-rawwidth=&1627& data-rawheight=&637& class=&origin_image zh-lightbox-thumb& width=&1627& data-original=&/v2-cccf54143b9b_r.png&&&br&&p&第三、N的叔叔U是黑色的,且N是右孩子。我们对P进行一次左旋转调换新结点和其父 结点的角色,就把问题转化成了第二种情况。如图 2.16所示。&/p&&img src=&/v2-8bf3fd95b6ad0cfa6e3782_b.png& data-rawwidth=&1637& data-rawheight=&648& class=&origin_image zh-lightbox-thumb& width=&1637& data-original=&/v2-8bf3fd95b6ad0cfa6e3782_r.png&&&p&红黑树插入数据的代码与二叉查找树是相同的,只是在插入以后,会对不满足红黑树性质的结点进行调整。具体的调整的代码如下所示。&/p&&p&代码中的 right rotate 的操作就是平衡二叉树中的右旋操作的函数。可见,红黑树的插入的调整的核心操作仍然是结点的旋转。所以深刻地理解旋转操作对于理解自平衡的二叉树具有重要意义。&/p&&p&好了。今天就讲这么多。今天的作业:&/p&&p&向树中依次插入(1,2,3,4,5,6,7,8,9,10),并且在纸上画出来红黑树变化的过程。总共画十幅图。拍成照片,发到我QQ上。&/p&&p&明天我们来讲红黑树的删除。后天讲代码。&/p&&p&上一节课:&/p&&p&下一节课:&a href=&/p/?refer=hinus& class=&internal&&红黑树(二):删除&/a&&/p&&p&目录:&a href=&/p/?refer=hinus& class=&internal&&课程目录&/a&&/p&
我们讲二叉树啊,平衡树的旋转啊,费了那么多劲,目的就是为了引出今天的主题:红黑树。红黑树是JDK中最重要的一个树型数据结构。TreeSet, TreeMap,以及最新的Hashtable都使用了红黑树。红黑树在各种框架,开源软件,系统中十分常见。比如在linux源代码中…
&img src=&/50/v2-5fa360f6552_b.jpg& data-rawwidth=&900& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&/50/v2-5fa360f6552_r.jpg&&&p&本文章属于&a href=&/p/?refer=pachong& class=&internal&&爬虫入门到精通系统教程&/a&第三讲&br&&/p&&h2&IDE的安装&/h2&&p&IDE我用的是VS code,也用过pycharm(但是电脑配置不行,比较卡)&/p&&p&VScode安装教程&a href=&/?target=https%3A///docs/setup/setup-overview& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在这&i class=&icon-external&&&/i&&/a&,写的蛮清楚的&/p&&p&然后安装一个python的插件就行 见如下截图&/p&&ul&&li&点击数字1的地方&/li&&li&在数字2的地方输入python&/li&&li&点击python 0.5.8 右边的安装按钮&/li&&/ul&&img src=&/v2-fac6933bf8_b.png& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/v2-fac6933bf8_r.png&&&h2&包的安装&/h2&&h2&配置pip源,不配置的话下载速度很慢&/h2&&p&windows:在当前用户根目录下,创建.pip和这个文件夹,然后在里面新建一个文件(&a href=&/p//pip.in& class=&internal&&pip.in&/a&) 里面的内容为&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&[global]
index-url = /pypi/simple/
trusted-host=
&/code&&/pre&&/div&&p&截图如下(我当前用户名为kimga) &/p&&img src=&/v2-24c6aa1a3f102aed87f43_b.png& data-rawwidth=&881& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&881& data-original=&/v2-24c6aa1a3f102aed87f43_r.png&&&p&&br&&/p&&p&linux:在~/.pip/pip.conf文件中添加或修改(内容同上)&/p&&h2&包的安装&/h2&&p&直接pip install 包的名字 如 pip install requests&/p&&p&依次安装如下4个包&/p&&ol&&li&requests&/li&&li&lxml&/li&&li&ipython&/li&&li&jupyter&/li&&/ol&&p&如果发现报错的话,&/p&&ul&&li&ubuntu用apt-get install python-包名&/li&&ul&&li&如 apt-get install python-lxml&/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&windows 在&a href=&/?target=http%3A//www.lfd.uci.edu/%7Egohlke/pythonlibs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unofficial Windows Binaries for Python Extension Packages &i class=&icon-external&&&/i&&/a&这个网站上手动下载然后安装(&b&这个网站有各种python windows扩展包,pip install 报错的话,就可以到这个网站上下载安装&/b&)&/li&&/ul&&p&windows下pip install lxml 很少能安装成功。。。&/p&&img src=&/v2-4f3ca13cfc16a9b387c016_b.png& data-rawwidth=&993& data-rawheight=&820& class=&origin_image zh-lightbox-thumb& width=&993& data-original=&/v2-4f3ca13cfc16a9b387c016_r.png&&&p&那我们怎么做呢?&/p&&ol&&li&打开&a href=&/?target=http%3A//www.lfd.uci.edu/%7Egohlke/pythonlibs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Unofficial Windows Binaries for Python Extension Packages&i class=&icon-external&&&/i&&/a&这个网址&/li&&li&ctrl+ F,然后在搜索框内输入lxml&/li&&/ol&&img src=&/v2-7179a27fae963efb6e247d789d4e7b97_b.png& data-rawwidth=&968& data-rawheight=&728& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-7179a27fae963efb6e247d789d4e7b97_r.png&&&ol&&li&找到与你系统版本相同的包,下载&/li&&/ol&&ul&&li&我的python版本是2.7,系统是64位的,所以我选择lxml-3.7.3-cp27-cp27m-win_amd64.whl&/li&&/ul&&img src=&/v2-ea51e717dc0396264efe7d_b.png& data-rawwidth=&968& data-rawheight=&728& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-ea51e717dc0396264efe7d_r.png&&&p&&br&&/p&&ol&&li&下载完成后在你下载的目录下打开cmd命令行&/li&&/ol&&ul&&li&这边有个小技巧是,找到你下载的目录后,按住shift不放,然后空白处右键,会多出来一个在此处打开命令窗口,不用再慢慢的cd过来&/li&&/ul&&img src=&/v2-1ab3f55adf6fde_b.png& data-rawwidth=&248& data-rawheight=&353& class=&content_image& width=&248&&&p&&br&&/p&&ol&&li&然后pip install 你刚下载的文件,发现就安装成功了 &/li&&/ol&&img src=&/v2-1f2868fad4d6d7eff9856_b.png& data-rawwidth=&993& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&993& data-original=&/v2-1f2868fad4d6d7eff9856_r.png&&&h2&Google浏览器的安装&/h2&&p&在&a href=&/?target=http%3A///soft/detail/14744.html%3Fald& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&百度软件中心&i class=&icon-external&&&/i&&/a&下载&/p&&p&记得点&b&普通下载&/b&(要不然有可能会收获百度全家桶一份)&/p&&p&下载完正常安装就行&/p&&h2&安装可以更换浏览器头的插件&/h2&&ol&&li&打开 &a href=&/?target=http%3A//chrome-/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&google插件下载&i class=&icon-external&&&/i&&/a&这个网页&/li&&li&在输入框内输入 extension ID ffhkkpnppgnfaobgihpdblnhmmbodake&/li&&li&点击下载 &/li&&li&如果无法下载的话,就点击链接加入群【Python爬虫】:&a href=&/?target=https%3A///%3F_wv%3DD4CT2L9h& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&二维码页面&i class=&icon-external&&&/i&&/a&,群文件里面有。群()&/li&&/ol&&img src=&/v2-03cccba646d652b_b.png& data-rawwidth=&968& data-rawheight=&728& class=&origin_image zh-lightbox-thumb& width=&968& data-original=&/v2-03cccba646d652b_r.png&&&ol&&li&下载完成后,打开Google浏览器,在地址栏输入chrome://extensions/&/li&&li&把刚刚下载的文件拖进去进行&/li&&/ol&&p&最终效果见下图&/p&&img src=&/v2-a1e680e95f717ee5e34ee1_b.png& data-rawwidth=&485& data-rawheight=&481& class=&origin_image zh-lightbox-thumb& width=&485& data-original=&/v2-a1e680e95f717ee5e34ee1_r.png&&&h2&总结&/h2&&p&看完本篇文章后,你应该要&/p&&ul&&li&有一个自己熟悉的python IDE&/li&&li&Python配置国内源&/li&&li&能安装python包&/li&&li&有安装Google浏览器&/li&&li&有可以更换浏览器头的插件&/li&&/ul&&p&最后,因为后续实战我基本上都是用Jupyter notebook来写调试的,所以请阅读以下两篇文章,能大概了解Jupyter notebook&/p&&p&&a href=&/?target=http%3A///article/getting-started-with-jupyter-notebook-part-1/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook快速入门(上)&i class=&icon-external&&&/i&&/a&&/p&&p&&a href=&/?target=http%3A///article/getting-started-with-jupyter-notebook-part-2/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jupyter Notebook快速入门(下)&i class=&icon-external&&&/i&&/a&&/p&
本文章属于第三讲 IDE的安装IDE我用的是VS code,也用过pycharm(但是电脑配置不行,比较卡)VScode安装教程,写的蛮清楚的然后安装一个python的插件就行 见如下截图点击数字1的地方在数字2的地方输入python点击python 0.5.8 右边…
开工已经一周了,这周状态不错,基本能按照制定的计划来。写这篇文章,主要是想记录下这周学习到的一些好玩的东西,还有新年以来自己的一些想法。&h2&职业生涯&/h2&自从步入职场,我就一直思考自己的职业生涯应该怎么走。开过很多脑洞,有过很多的想法,也带来很多困扰和焦虑。其中最大的原因是能力跟不上眼光,看得太远,走的太慢,心中万分急躁。在这曲折的思索纠结过程,同时也给了我更宽的视野和更多的思路,慢慢摸索出自己想走的方向。&p&找准方向后,今年我给自己定的基调是:沉淀和发散。沉淀,是指在技术方面,把基础继续夯实,逐渐成长为有丰富经验的开发者,对底层、对组件的理解,要比过去再深入一层。发散,则是我希望自己能在业余时间,学习变成一个优秀的独立游戏开发者。为什么是“游戏开发者”,除了我目前从事的是游戏开发之外,下面会聊到更多的原因。&/p&&h2&算法&/h2&&p&这周开始我的第三次刷 leetcode 计划。没错,前两次都有各种原因(借口)半途而废。这次告诉自己一定要坚持下来。分享一道这周刷到的有意思的题目:《&a href=&/?target=https%3A///problems/median-of-two-sorted-arrays/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Median of Two Sorted Arrays&i class=&icon-external&&&/i&&/a&》。题意是找出两个有序数组的中位数,要求是 log(m+n)。一看到 log(m+n),我就知道要用二分法,但思路就止步于此了,最后还是参考了别人的做法才做出来(如下图)。这周刷题还是有点心得的,以前觉得算法太过理论化,实际工作中不太会用到。但最近在思考一些需求的时候,明显感觉到自己在算法这方面的不足,对算法的不熟悉,使我在设计方案时太过依赖各种组件的能力。算法还是得好好加强巩固下。&/p&&img src=&/v2-aaed0f2aed456e7e5e300c48_b.png& data-rawwidth=&1327& data-rawheight=&422& class=&origin_image zh-lightbox-thumb& width=&1327& data-original=&/v2-aaed0f2aed456e7e5e300c48_r.png&&&h2&架构&/h2&&p&由于早上起不来,时间有限,只读了一两篇 engineering blog。分享一篇比较有意思的:《&a href=&/?target=https%3A///posts/576/client-side-ranking-to-more-efficiently-show-people-stories-in-feed/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Client-side ranking to more efficiently show people stories in feed&i class=&icon-external&&&/i&&/a&》。角度新颖,在客户端对 feed 流的展示顺序做优化,以提高用户体验。实现方案看起来不难,但却是个比较特别的做法。&/p&&h2&阅读&/h2&&p&这周大部分业余时间都在读《&a href=&/?target=https%3A///subject/1436811/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linker & Loader&i class=&icon-external&&&/i&&/a&》。还没读完,觉得不太好懂,但可以把之前读《操作系统》、《Linux 内核设计与实现》的一些知识点拼接起来,让自己有更整体的理解。&/p&&p&另外整理之前读《操作系统》的读书笔记的时候,偶然读到一句话:“如果能把文件看成是一种地址空间,那么就离理解文件不远了”。这句话点醒了我,如果把文件比做虚拟地址空间,文件的磁盘地址比做内存物理地址,文件通过 inode 来管理映射关系,而类似的虚拟内存由页表来管理映射关系。这么看来,磁盘和内存,本质上都用了相同的抽象方法。&/p&&p&最后在放松时间读的书是《&a href=&/?target=https%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&游戏设计梦工厂&i class=&icon-external&&&/i&&/a&》。对于一个从来没有关注过游戏策划的技术人,我觉得这本书太适合入门游戏设计了。首先这本书是实打实的介绍了游戏设计的理论,为什么这一点很重要,因为学习计算机这条路就是充满了理论、规范和模式,所以我已经习惯了理论+实践的学习方法。以前我尝试理解产品策划做事的方法论,总觉得太过感性而没有理论的支持。而这本书很好的介绍了游戏设计的流程、游戏的构成。比如把游戏分成:玩家、目标、行为、规则、资源、冲突、边界和结构这几种正规元素。当我尝试设计一个游戏时,我不会去直接复制某个已有游戏的玩法,而会去思考我的游戏的目标是什么?允许玩家可以有哪些行为?应该制定哪些规则?有了理论的指导,让我可以用更加上层的角度看待问题。&/p&&p&为什么想做独立游戏开发者,因为游戏设计不像是编程,编程遵循范式,套用模式。游戏虽然有理论基础,但需要游戏设计者在此基础上发散、创新。设计游戏需要对历史、人文、经济等等各个领域都有些了解,游戏设计也时常从生活中汲取灵感。对我来说,这和编程带给我的是非常不同的体验。我希望设计游戏的过程能让自己更近贴近生活,更大胆去学习其他领域,去突破自己。&/p&&h2&电影&/h2&&p&周末看了部电影《&a href=&/?target=https%3A///subject/3231740/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&侠探杰克&i class=&icon-external&&&/i&&/a&》,但想聊的不是电影本身,而是看电影中忽然冒出的联想。在读《&a href=&/?target=https%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&游戏设计梦工厂&i class=&icon-external&&&/i&&/a&》的时候,提到玩家的交互模式有:&/p&&ul&&li&单人玩家 vs 游戏系统&/li&&li&多名独立玩家 vs 游戏系统&/li&&li&玩家 vs 玩家&/li&&li&单边对抗&/li&&li&多边对抗&/li&&li&协作游戏&/li&&li&团队竞争&/li&&/ul&&p&在看到《&a href=&/?target=https%3A///subject/3231740/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&侠探杰克&i class=&icon-external&&&/i&&/a&》中 杰克和反派头牌 pk 的时候,忽然发现这类电影的模式也能够归类到游戏中玩家的交互模式,例如《&a href=&/?target=https%3A///subject/3231740/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&侠探杰克&i class=&icon-external&&&/i&&/a&》属于玩家 vs 玩家(反派头牌挺强的,归类为玩家对玩家),《美队3》属于团队竞争(分成两个阵营对打),《飓风营救》属于单个玩家 vs 游戏系统(反派都是小喽啰,我归类为游戏系统)。唔,这波可能脑洞有点大..哈哈&/p&&h2&工作&/h2&&p&今年任重道远,虽然目前具体任务还没安排下来,趁着有空我也稍微思考了些潜在的需求。一个比较有挑战的是全区实时排行榜。全区意味着海量,数据量大全部都实时做排序必定不现实。我想的方案是分段,按段位不同做不同的排序策略。排名靠前的段位做实时排序,其余段位做模糊排序(只给百分比)。所以关键点在于如何快速算出玩家的段位。&/p&&p&假设排序的 key 是分数,最高分是 10w。我的思路是用桶排序。定义一个长度为 10w 的数组:&/p&&p&int score[100000];&/p&&p&玩家的分数为数组索引。假设我玩了 9w 分,那么更新该数组:&/p&&p&score[90000]++;&/p&&p&这样只需要遍历下该数组就知道玩家的大致段位:&/p&&p&float get_percent(query_score) {
pass_people = 0;
// 引用&/p&&p&
total_people = 0;
// 引用&/p&&p&
for (score = MAX_SCORE; score &= 0; score--) {&/p&&p&
if (score & query_score)
pass_people++;
total_people++;&/p&&p&
return float(pass_people)/total_&/p&&p&}&/p&&p&这样就可以很方便的实现分段实时排行。例如在前 1% 的玩家才做实时排序,后面的玩家只返回排名的百分比。这个方案应该还有我没想到的点,欢迎大家讨论。&/p&&h2&结束语&/h2&&p&写完流水账,最后硬广一波,欢迎大家踩下我的&a href=&/?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&博客&i class=&icon-external&&&/i&&/a&。博客的定位偏向技术文章,后续我会继续在知乎写写平时的想法,欢迎大家一起交流~&/p&
开工已经一周了,这周状态不错,基本能按照制定的计划来。写这篇文章,主要是想记录下这周学习到的一些好玩的东西,还有新年以来自己的一些想法。职业生涯自从步入职场,我就一直思考自己的职业生涯应该怎么走。开过很多脑洞,有过很多的想法,也带来很多困…
&img src=&/50/v2-8d6ad288faffaccf0e45929_b.png& data-rawwidth=&401& data-rawheight=&220& class=&content_image& width=&401&&&p&1月9日上午,国家科学技术奖励大会在京召开,中国科学院物理研究所赵忠贤院士荣获2016年度国家最高科学技术奖,中共中央总书记、国家主席、中央军委主席习近平向赵忠贤院士颁奖。&br&&/p&&p&赵忠贤是我国高温超导研究主要的倡导者、推动者和践行者,为高温超导研究在中国扎根并跻身国际前列做出了重要贡献,是我国高温超导研究的奠基人之一,也是新中国培养的科学家的杰出代表之一。&/p&&br&&img src=&/50/v2-a485f90456bfa09d0b528fbfe0f415d4_b.jpg& data-rawwidth=&945& data-rawheight=&637& class=&origin_image zh-lightbox-thumb& width=&945& data-original=&/50/v2-a485f90456bfa09d0b528fbfe0f415d4_r.jpg&&&p&&strong&神奇的超导&/strong&&/p&&br&&p&超导(全称超导电性),是指某些材料在温度降低到某一临界值(即超导临界温度)以下时,电阻突然消失的现象。具备这种特性的材料称为超导体。&/p&&p&也许大家并不知道,超导就在我们的身边:现在医院里用的1.5T和3T的核磁共振成像仪的核心部件是1.5特斯拉(磁感应强度的度量单位)或3特斯拉的超导磁体;北美地区有几千台高温超导滤波器服务在手机基站上,与传统基站相比大大改善了通信质量;2012年发现“上帝粒子”的欧洲核子中心的大型对撞机中,几十公里长的超导加速环和多个有几层楼高的超导探测器都是最关键的部件……&/p&&p&超导更有着光明的应用前景。德国利用高温超导磁体的涡流加热技术,将热加工铝材的电能转化效率提高了30%。一旦超导技术得到广泛的应用,将为人类创造相当可观的效益。日本已计划在2027年开始运行新的新干线,采用的超导磁悬浮列车时速将达到500公里。&/p&&p&在纯科学上,超导作为当今物理学界最重要的前沿问题之一也吸引了无数科学家的目光。自1911年人类发现超导以来,已颁发5次诺贝尔奖给10位研究超导的科学家。&/p&&img src=&/50/v2-fefb5f03d0b0_b.jpg& data-rawwidth=&866& data-rawheight=&552& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&/50/v2-fefb5f03d0b0_r.jpg&&&br&&p&其实自1911年以来,超导研究中最重要的两个问题一直是:怎样找到临界温度更高、更适于应用的超导体?超导体为什么会超导?无数优秀的科学家为此前赴后继,赵忠贤就是其中平凡又杰出的一位。&/p&&br&&p&&strong&年轻的科学梦&/strong&&/p&&br&&p&高中时代,赵忠贤被国家提出的“向科学进军”的号召深深地影响着。他从一本苏联杂志中了解到了很多“老大哥”的新进展,如卫星、火箭、半导体等等。这让赵忠贤对科学产生了浓厚的兴趣,也有了让中国成为一个科技强国的渴望。&/p&&p&高中毕业时,赵忠贤最初想报考地质专业,为祖国寻找矿产资源,但体检时被误诊为平足,没有资格报考。想考哈军工,因被指反对卫生大跃进而失去报名的机会。在向副校长(兼任班主任)申述政治表现时,偶然被一份招生简章所吸引,在个别同学的“激励”下,决定报考地处北京的中国科学技术大学,而且第一和第二志愿都是该校。&/p&&img src=&/50/v2-8b5c94fcdb67_b.jpg& data-rawwidth=&736& data-rawheight=&631& class=&origin_image zh-lightbox-thumb& width=&736& data-original=&/50/v2-8b5c94fcdb67_r.jpg&&&p&&b&图3:1959年大学入学留念(北京玉泉路中国科技大学礼堂前)&/b&&/p&&p&1959年,赵忠贤被中国科学技术大学技术物理系录取,1964年大学毕业并被分配到中国科学院物理研究所。他满怀着对祖国科学未来的美好憧憬一干就是五十多年。&/p&&p&&strong&有胆识的年轻人&/strong&&/p&&br&&p&赵忠贤很快在物理所崭露头角,并成为所里重点培养的青年人才。&/p&&p&物理所是新中国超导研究的发源地,赵忠贤被分配在室主任洪朝生先生兼任组长的研究组从事超导研究。文革开始以后,超导研究受到很大影响,大部分基础研究被迫停止,年轻的赵忠贤作为业务负责人,参加并完成了几项国防任务。&/p&&p&1973年,经周总理批示,一批年轻学生和学者被派往国外学习, 赵忠贤被从干校召回,1974年到英国剑桥大学进修,接触到了世界超导研究最前沿。75年回国后,赵忠贤提出要“探索高临界温度超导体”(简称“高温超导体”)。&/p&&br&&p&&img src=&/50/v2-4a057bcca71_b.jpg& data-rawwidth=&519& data-rawheight=&747& class=&origin_image zh-lightbox-thumb& width=&519& data-original=&/50/v2-4a057bcca71_r.jpg&&&b&图4:1975年春节于剑桥大学&/b&&/p&&p&所谓“高温超导体”,是指临界温度在40K(约零下233摄氏度)以上的超导体。麦克米兰根据获1972年诺贝尔奖的BCS理论计算,认为超导临界温度最高不大可能超过40K,他的计算得到了国际学术界的普遍认同,40K也因此被称作“麦克米兰极限”。&/p&&p&经过调研、交流和缜密思考,赵忠贤支持少数理论家对国际广泛认同的由经典理论推导出的麦克米兰极限提出的挑战。1977年,他在《物理》上撰文阐述自己的观点,指出结构不稳定性又不产生结构相变可以使临界温度达到40-55K,进而提出复杂结构和新机制在某些情况下甚至可以达到80K。&/p&&p&当时别人都认为赵忠贤实在是太大胆了。物理研究中的低温,通常是用液氦和液氮来实现的。液氮最低只能实现77K,所以对临界温度低于40K的超导体,只能用贵数十倍的液氦进行研究。1958年“大跃进”时期,中国没有液氦,也就没法研究超导。受当时氛围的影响,相当一段时间的研究是跃进式的,目标是“跃进”出超过77K的“液氮温区超导体”,结果可想而知。所以时隔20年后当赵忠贤再次提出80K的液氮温区超导体也是可以存在时,大家都还心有余悸。&/p&&p&但赵忠贤作为当时极少数的“归国人才”还是得到了支持,开始在全国组织和推广“探索高临界温度超导体”研究。截至1986年底,他已组织召开了6届研讨会。虽然条件艰苦到在被窝里打老鼠,但他身边也逐渐有了一批志同道合的同事。&/p&&br&&p&&strong&厚积薄发,一鸣惊人&/strong&&/p&&br&&p&赵忠贤自己也从未想到,在短短几个月里,他从一名物理所普通研究人员,变成了在国际物理学界代表中国的符号。&/p&&p&1986年,欧洲科学家柏德诺兹和缪勒发表了镧-钡-铜-氧体系可能存在35K超导的工作。当时国际上有的超导研究者在关注另一篇论文(该文事后被证明为谬误),而赵忠贤和其他少数几个学者对柏德诺兹和缪勒的论文产生了兴趣。该文中提到的“杨-泰勒”效应与赵忠贤1977年文章中提到的“结构不稳定性又不产生结构相变会导致高的超导温度”产生共鸣,促使他立刻组织团队,在那个年代科研条件相对简陋的情况下开始研究铜氧化合物超导体。&/p&&p&1986年底,赵忠贤的团队和国际上少数几个小组几乎同时在镧-钡-铜-氧体系中突破了麦克米兰极限,获得了40K以上的高温超导体。一时间,世界物理学界可以说是地动山摇,传统理论的崩塌让“北京的赵”多次出现在国际著名的科学刊物上。&/p&&p&就在这次突破中,赵忠贤团队还发现了70K的超导迹象,这已经离77K液氮温区不远了。遗憾的是,国外的研究组在同样的体系中没有看到70K的迹象。&/p&&p&由于当时没人能够重复70K迹象,海外有学者质疑中国的结果,来信和打电话施压。赵忠贤他们却意识到:名义上“同样的体系”只是基本化学配比相同,但实际成分是不同的—他们的实验样品用的原料是1956年公私合营的工厂生产的,含有很多杂质。这启发他们注意到也可能是杂质发挥了某种作用,从而导致70K迹象的出现。他们于是开始主动“引入杂质”。 在用锶取代钡没有复现70K迹象之后,确定了“在钡基、多相的体系中、用钇取代镧”的方案并得以实施,日深夜,他们团队在钡-钇-铜-氧中发现了临界温度93K的液氮温区超导体,日中国科学院数理学部举行新闻发布会宣布了这一发现并在世界上首次公布了元素组成。25日的《人民日报》报道了这一消息,世界各大通讯社纷纷转载,在世界上刮起了一阵液氮温区超导体的旋风。赵忠贤所在集体因此荣获1989年度国家自然科学集体一等奖,他也作为团队代表获得了第三世界科学院物理奖。&/p&&p&&img src=&/50/v2-acdcff75eb_b.jpg& data-rawwidth=&1015& data-rawheight=&701& class=&origin_image zh-lightbox-thumb& width=&1015& data-original=&/50/v2-acdcff75eb_r.jpg&&&b&图5:1987年与关于YBCO高温超导电性论文的全体作者在在物理所A楼实验室前合影&/b&&/p&&p&赵忠贤等人的成果受到了国际学术界的关注。93K超导体的发现使柏德诺兹和缪勒“铜氧化合物可能存在35K超导性”一文的重要意义凸显出来,获得1987年诺贝尔物理学奖。为此,授奖公报中还提到了中国的工作。柏德诺兹指出:“赵教授及其同事们的研究成果是举世瞩目的,感谢他们为世界科技的发展和超导研究做出了重要贡献。”&/p&&p&&img src=&/50/v2-edfa6628a_b.jpg& data-rawwidth=&1022& data-rawheight=&560& class=&origin_image zh-lightbox-thumb& width=&1022& data-original=&/50/v2-edfa6628a_r.jpg&&&b&图6:1987年9月人民大会堂,第三世界科学院Salam院长授TWAS奖&/b&&/p&&p&赵忠贤等人的工作大大提升了中国物理学界的国际地位。1987年,赵忠贤作为五位特邀报告人之一参加了美国物理学会三月会议。中国科学家在国际上有这样的待遇,在当时是极其罕见的。那次会议后来被称作“物理学界的摇滚音乐节”—被高温超导突破吸引来的物理学家们挤满了整个会场,狂热的场面持续了7个多小时。1987年的三月会议,标志着中国物理学家走上了世界高温超导研究的舞台。&/p&&p&&img src=&/50/v2-2ce9c64383_b.jpg& data-rawwidth=&1154& data-rawheight=&780& class=&origin_image zh-lightbox-thumb& width=&1154& data-original=&/50/v2-2ce9c64383_r.jpg&&&b&图7:1987年代表小组作为五个特约报告人之一在美国物理学会三月会议上作报告&/b&&/p&&br&&p&&strong&再创佳绩&/strong&&/p&&br&&p&在1987年的辉煌之后,赵忠贤潜心研究20年,终于带领中国团队再次引领世界热潮。&/p&&p&&img src=&/50/v2-ffda62a1503456cbc50fa5b0e3e84177_b.jpg& data-rawwidth=&1143& data-rawheight=&851& class=&origin_image zh-lightbox-thumb& width=&1143& data-original=&/50/v2-ffda62a1503456cbc50fa5b0e3e84177_r.jpg&&&b&图8:1988年在办公室 &/b&&/p&&p&在87年取得成绩之后,虽然获得许多奖励和荣誉,但赵忠贤没有被冲昏头脑。他一直对所里的同事讲:我就是一个普通人,我做的就是自己的本职工作。荣誉归于国家,成绩属于集体,我个人只是其中的一份子。他兢兢业业,一门心思继续他的高温超导研究。&/p&&p&&img src=&/50/v2-0e4b9daed099fb_b.jpg& data-rawwidth=&1154& data-rawheight=&804& class=&origin_image zh-lightbox-thumb& width=&1154& data-original=&/50/v2-0e4b9daed099fb_r.jpg&&&b&图9:1992年前后在实验室工作中&/b&&/p&&p&也是在这段时间里,这个“普通人”踏踏实实地进一步凝练学术思想,他逐渐发展出的新的学术思路又一次成了第二次突破的基础。在此期间他还}

我要回帖

更多关于 如何安装语言包 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信