精华内容
下载资源
问答
  • 列数字的定义是什么
    千次阅读
    2020-12-21 14:01:13

    举例子,列数字,作比较,打比方,这几个说明方法的例句

    2018-09-19

    推荐内容

    点击登录

    举例子,列数字,作比较,打比方,这几个说明方法的例句

    来自 Clarence 的提问

    最佳答案

    由提问者推荐

    常见的说明方法有举事例、分类别、列数据、作比较、画图表、下定义、作诠释、打比方、摹状貌、引资料等10种。写说明文要根据说明对象的特点及写作目的,选用最佳方法。下面分别加以说明。

    (1)举例子。举出实际事例来说明事物,使所要说明的事物具体化,以便读者理解,这种说明方法叫举例法。如:

    一般人总以为,年龄稍大,记忆能力就一定要差,其实不然,请看实验结果:国际语言学会曾对9至18岁的青年与35岁以上的成年人学习世界语作过一个比较,发现前者就不如后者的记忆力好。这是因为成年人的知识、经验比较丰富,容易在已有的知识基础上,建立广泛的联系。这种联系,心理学上称为“联想”。人的记忆就是以联想为基础的,知识经验越丰富,越容易建立联想,记忆力就会相应提高。马克思五十多岁时开始学俄文,六个月后,他就能津津有味地阅读著名诗人与作家普希金、果戈里和谢德林等人的原文著作了。这是由于语言知识丰富,能够通晓很多现代和古代的语言的缘故。

    这段文章要说明的是:年龄稍大,记忆力不一定就差。为了说明这一点,作者先提供了实验结果,又分析了原因。到此为止,未尝不可,但不够具体,也缺乏说服力,于是,又举出了一个实例:马克思在五十多岁的时候,只用六个月时间便精通了俄语。这样一来,内容具体了,说服力增强了。

    说明文中的举事例的说明方法和议论文中的例证法,都可以起到使内容具体、加强说服力的作用。但二者又有区别。议论文中的事例,是用来证明观点的,说明文的事例,是用来介绍知识的。

    运用举事例的说明方法说明事物或事理,一要注意例子的代表性,二要注意例子的适量性。

    (2)分类别。将被说明的对象,按照一定的标准划分成不同的类别,一类一类地加以说明,这种说明方法,叫分类别。

    分类别是将复杂的事物说清楚的重要方法。

    运用分类别方法要注意分类的标准,一次分类只能用同一个标准,以免产生重叠交叉的现象。例如:“图书馆的藏书有中国的、古典的、外国的、科技的、文学的、现代的以及政治经济方面的等。”这里用了不只一个标准,所以表达不清。正确的说法应该是:

    图书馆的藏书,按国别分,有中国的、外国的;按时代分,有古典的、现代的;按性质分,有科技的、文学的以及政治经济方面的等。

    这样,每次分类只用一个标准,就眉目清楚了。

    有的事物的特征、本质需要分成几点或几个方面来说,也属于分类别。

    注意,运用分类别方法,所列举的种类不能有遗漏。

    (3)列数据。为了使所要说明的事物具体化,还可以采用列数据的方法,以便读者理解。需要注意的是,引用的数字,一定要准确无误,不准确的数字绝对不能用,即使是估计的数字,也要有可靠的根据,并力求近似。

    (4)作比较。说明某些抽象的或者是人们比较陌生的事物,可以用具体的或者大家已经熟悉的事物和它比较,使读者通过比较得到具体而鲜明的印象。事物的特征也往往在比较中显现出来。

    在作比较的时候,可以是同类相比,也可以是异类相比,可以对事物进行“横比”,也可以对事物进行“纵比”。

    (5)画图表。为了把复杂的事物说清楚,还可以采用图表法,来弥补单用文字表达的缺欠,对有些事物解说更直接、更具体。

    (6)下定义。用简明的语言对某一概念的本质特征作规定性的说明叫下定义。下定义能准确揭示事物的本质,是科技说明文常用的方法。

    下定义的时候,可以根据说明的目的需要,从不同的角度考虑。有的着重说明特性,如关于“人”的定义;有的着重说明作用,如关于“肥料”的定义;有的既说明特性又说明作用,如关于“统筹方法”和“应用科学”的定义。

    ①人是能制造工具并使用工具进行劳动的高级动物。

    ②肥料是能供给养分使植物生长的物质。

    ③统筹方法,是一种安排工作进程的数学方法。

    ④工程技术的科学叫做应用科学,它是应用自然科学的基础理论来解决生产实践中出现的问题的学问。

    冰山

    2009-08-30

    0

    59

    21

    其他5条回答

    其他回答

    5条回答

    fujiyue

    2009-08-30

    列数字

    南浦大桥是上海市区第一座跨越黄浦江的大桥,建成于1991年11月。总长8346米,其中主桥全长846米,引桥全长7500米。

    作比较

    李白想落天外的特点,大大发展了庄子寓言,屈原初次的浪漫精神和表现手法,也融汇了道教的神仙意象,具有令人惊叹不已的艺术魅力,赢得了一代「诗仙」的赞誉。而杜甫是中国文学史上伟大的现实主义诗人,他的诗深刻地反映了唐朝由兴盛走向衰亡时期的社会面貌,具有丰富的社会内容,鲜明的时代色彩和强烈的政治倾向。他的诗激荡着热爱祖国、热爱人民的炽烈情感和不惜自我牺牲的崇高精神,因此被后人公认为“诗史”。

    举例子

    艺术手法方面的显著特点,比如,李白的诗歌在艺术手法方面的显著特点是:想象神奇,变化无端,结构纵横跳跃,句式长短错落,形成了雄奇飘逸的风格。

    0

    4

    5

    天宇

    2009-09-08

    中国人说话爱打比方,用于文章叫比喻。比方打得好,可以生动形象、通晓 明白,帮助人们理解问题,所以好的演讲者都会打比方。但是,如果比方打得不好,或者说打得太“好”,那就令人厌恶了。

    打比方是向别人——尤其是外行,解释一个问题的良好方法。很多学者和管理专家都愿意采用打比方的方式来说明一个问题。但是,并不是每一个人都知道如何打比方,以及如何才能准确地打比方。这两天和朋友聊天以及我看电视的经验表明这并不是一个简单的问题。因此想对这个问题说两点。

    1、打比方的第一个关键是要抓住问题的核心。换句话说,原问题和所打的比方必须具有共同的关键问题。很多比方,看似精妙,实际上是错误的。比如说,关于经济发展中的泡沫,曾经有非常著名的经济学家认为,它就像喝啤酒时的泡沫,有了泡沫喝起来才有味道。这不是一个好的比方。啤酒有泡沫才好喝,但经济发展有泡沫永远都是不好的。又是同一位经济学家,在别人问到他对经济发展的看法时说,经济发展就象骑自行车,太快了会摔跤,太慢了会倒。所以要不快不慢。这是个比较好的比方。因为经济增长太慢,社会问题就容易累积爆发出来。经济增长太快,就容易产生投资过热和通货膨胀等问题。

    打比方的第二个关键是必须用简单的东西来比喻复杂的问题,而不是用复杂的东西来比喻简单的问题。

    2、一种说明文的说明方法

    打比方是通过比喻的修辞方法来说明事物特征的一种方法。

    打比方的作用:使文章更具体、生动、形象。

    0

    2

    6

    tina

    2009-09-11

    举例子是举出代表性的能说明问题的例子来验证;

    列数字是用数字或者数据来更具有说服性,这个国家统计局最常用;

    作比较通常老师会用反面形象当做教材来比较正面形象;

    打比方也就是比喻,比如;

    0

    3

    6

    匿名用户

    2009-09-13

    举例子。举出实际事例来说明事物,使所要说明的事物具体化,以便读者理解,这种说明方法叫举例法。如:

    0

    3

    5

    翰林学士

    2009-09-13

    举例子:什么事水果啊?比如苹果,香蕉,西瓜等都是水果。列数字:我国约有13亿人。打比方:太阳像一个大火球。做比较:中国与其他国比,还是我们中国的人数多。

    0

    2

    4

    广告

    前往了解治疗方法

    推荐内容

    正在加载...

    © 2018 Sogou Inc.

    免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

    http://www.pinlue.com/style/images/nopic.gif

    更多相关内容
  • 首先定义一个字典,然后使用map方法就可以把某一的字符类型的值转换为数字。 以上就是对使用pandas把某一的字符值转换为数字的认识。 这篇使用pandas把某一的字符值转换为数字的实例就是小编分享给大家的全部...
  • 魔法矩阵 基于用户界面 快照 :star:
  • 什么是数字水印

    千次阅读 2020-08-05 22:47:09
    经常有文章把数字签名和数字水印“傻傻分不清”,那今天就介绍一下数字水印。 一、数字水印技术原理 数字水印是一种信息隐藏技术,它利用人体感官的限制,将数字信号,如图像、文字、符号、数字等一切可以作为标记、...

    经常有文章把数字签名和数字水印“傻傻分不清”,那今天就介绍一下数字水印。

    一、数字水印技术原理

    数字水印是一种信息隐藏技术,它利用人体感官的限制,将数字信号,如图像、文字、符号、数字等一切可以作为标记、标识的信息与原始数据(如图像、音频、视频数据)紧密结合并隐藏其中,并可以经历一些不破坏源数据价值的操作而能保存下来。

    一般地,数字水印应具有如下的基本特性:

    (1)可证明性:水印应能为受到版权保护的信息产品的归属提供完全和可靠的证据。

    (2)不可感知性:不可感知包含两方面的意思,一个指视觉上的不可感知性(对听觉也是同样的要求),即因嵌入水印导致图像的变化对观察者的视觉系统来讲应该是不可察觉的,最理想的情况是水印图像与原始图像在视觉上一模一样,这是绝大多数水印算法所应达到的要求;另一方面水印用统计方法也是不能恢复的,如对大量的用同样方法和水印处理过的信息产品即使用统计方法也无法提取水印或确定水印的存在。

    (3)鲁棒性:鲁棒性即健壮性,它对水印而言极为重要。一个鲁棒性强的数字水印应该能够承受大量的、不同的物理和几何失真,包括有意的(如恶意攻击)或无意的(如图像压缩、滤波、扫描与复印、噪声污染、尺寸变化等等)。但易碎水印技术恰恰与之相反,其鲁棒性很低,它所保护信息的微小变化都会引起水印被破坏。

    二、一种使用易碎水印保护图像的方法

    基于易碎水印的基本原理,我们可以使用它来保护图像,即当图像被更改后,哪怕是一个像素,都会破坏水印本身,从而达到验证保护的目的。

    其基本思想是修改原图像中的每一个像素点的值,使得修改后的图像经过某一种算法的运算可以得到一个新的二值图像或文本,即水印。基本步骤为:

    1. 首先设定一个映射函数f,通过此函数可以将原图像g的每一个像素值映射成一个二值L(0或1):

    在这里插入图片描述

    1. 设要嵌入的水印为W,W可以是一个二值图像,也可以是经过编码的字符串,这里面所使用水印为二值图像。根据以下公式修改原图像g的每一个像素值,使得修改后的g中每一个像素点的值通过f运算后都与W相同(要注意的是,修改幅度必须足够小,使肉眼观察不能察觉):
      在这里插入图片描述

    这样水印图像就被嵌入到原图像中了。

    1. 提取、验证水印。假设待提取水印的原图像为g,验证对照的水印图像为W。通过f函数算出g每个像素的对应二值W’,即为提出的水印。
      在这里插入图片描述

    将提取出的水印图像W’与W比较,就可以判断原图像g是否被更改过

    在这里插入图片描述

    下图就展示了水印保护的效果示意,原图像被修改后,对应的水印部分就会被破坏。
    在这里插入图片描述

    三、数字水印嵌入与提取

    根据易碎水印保护图像的基本原理,可以设计出以下使用流程。

    1.在原图像中的水印嵌入步骤

    1)首先选择一张8位二值BMP图片作为水印图像;

    2)从原图像的第一行第一列开始,逐个像素进行运算,

    3)将当前像素的红、绿、蓝 三原色值取出,分别为R、G、B;

    4)将R、G、B在映射表(Table)中所对应的映射结果(0或1)取出,并进行异或运算,得到运算结果P;

    5)取出水印图像对应位置像素的值,并除以255,得到结果W。因为水印为二值图像,像素值为0或255,故除以255后变成0和1方可做下面比较;

    6)若P=W,则跳回步骤2),进行下一像素的运算;

    7)若P<>W,在R、G、B中随机选中一个,修改其数值。如果数值大于175,数值减去1,如果数值等于或小于175,则数值加1;

    8)跳到步骤3)重新进行运算;

    9)原图像全部像素处理完毕,水印嵌入完成。

    2.在图像中提取水印嵌入步骤

    1)从图像的第一行第一列开始,逐个像素进行运算,

    2)将当前像素的红、绿、蓝 三原色值取出,分别为R’、G’、B’;

    3)将R’、G’、B’在映射表(Table)中所对应的映射结果(0或1)取出,并进行异或运算,得到运算结果P’;

    4)将P’值乘以255,得到结果W’。即为水印图案在此位置的像素值;

    5)跳回步骤2),进行下一像素的运算;

    7)最后得到水印图像。

    通过提取图像中的数字水印,并与原水印对比,可以检测图像是否被篡改过。正是因为数字水印也可以用来检测数据的完整性,所以出现了把数字签名称为数字水印的情况,通过上面的介绍就应该知道,数字签名和数字水印是完全不同的技术。

    四、强壮性数字水印的使用

    上面提出了用易碎水印保护图像完整性的方法。其实数字水印更多地被用于多媒体数据的版权保护。比如以前的画家用印章或签名标识作品的作者,那么今天的艺术家可以通过数字水印将自己的名字添加到作品中来完成著作权的标识。同样,影视音像公司也可以把公司的名字、标志等信息添加到出版的多媒体数字产品中。这样通过跟踪多媒体数据中的数字水印信息来保护多媒体数据的版权。这里的水印都是鲁棒性强的水印,也就是强壮性水印。因为只有采用强壮性的水印,才能保证无论盗版者怎么修改、压缩、转换数字作品,里面的数字水印信息都能尽量的保留下来,以作为版权拥有者追究盗版行为的有利证据和武器。

    除了在版权保护方面的应用,数字水印技术在文档(印刷品、电子文档等)的真伪认证上面也有很大的用途,将某些难以察觉的数字水印信息添加到文件中,大大增加了文件被伪造的难度。例如护照持有人的姓名在护照中被明显印刷出来,也可以在头像中将持有人姓名做为数字水印被隐藏起来,如果某人想通过更换头像来伪造一份护照,那么通过扫描护照就有可能检测出隐藏在头像中的水印信息与打印在护照上的姓名不符合,从而发现被伪造的护照。

    展开全文
  • Java poi Excel xls数字转字母

    千次阅读 2016-12-02 16:24:42
    最近遇到导出的xls中 是动态生成的,且单元格中需要用到公式,而xls公式不是用数字列号而是用字母来表示的,这时需要把数字号转成该对应的字母。因为是按月导出 一个月最多31天,所以刚开始采用的办法是...

    最近遇到导出的xls中 列是动态生成的,且单元格中需要用到公式,而xls公式不是用数字列号而是用列字母来表示的,这时需要把数字的列号转成该列对应的字母。因为是按月导出 一个月最多31天,所以刚开始采用的办法是定义一个包含1到31列字母的数组。后来想想这样总不是个办法 万一列数更多 且是不确定的呢。于是研究了下 怎么把xls数字列号转成对应的字母。

    先来看xlsx中的字母规律。在xls中,1到26列是A~Z,从第27列开始 是2个以上的字母组合 AA AB ... AZ 然后到BA BB ... BZ 直到 ZA ZB ... ZZ 这时两个字母的组合完了 接下来到3个字母 AAA AAB ... AAZ 然后到ABA ABB ... ABZ 一直到AZZ 然后是BAA BAB ... BZZ最后到ZAA ... ZZZ,接下来又是4个字母的组合如此循环...  。

    于是发现了规律: AA~AZ是在A~Z前面加了A,BA~BZ是在A~Z前面加了B,... ZA~ZZ是在A~Z前面加了Z,这时两个字母组合完毕;到3个字母 AAA~AAZ是在AA~AZ前面加了A,ABA~ABZ是在BA~BZ前面加了A,... AZA~AZZ是在ZA~ZZ前面加了A,这时AA~ZZ遍历完了一次(这里的AA~ZZ是前面两个字母组合里出现过的);接下来到下一轮遍历 在前面加B,BAA~BAZ是在AA~AZ前面加了B,... BZA~BZZ是在ZA~ZZ前面加了B,这时AA~ZZ又遍历完了一次;再进行下一轮遍历 一直到在所有两个字母的组合前都加过A~Z,这时3个字母的组合就全部组合完毕了。接下来到4个字母的组合 跟前面的2个、3个字母的组合类似,都是在上一个组合的基础上分别在前面加上A~Z。如下图


    字母组合是从第27列开始,每次的组合都是在上一个组合的基础上分别在前面加上A~Z。比如计算n=3个字母的组合AAA~ZZZ(上图红色竖线箭头部分):2个字母组合所在的范围是AA~ZZ(上图红色的“currentLen”部分),当前数组的位置(比如AAB)i与currentLen进行取余运算(i%currentLen)得到的结果就是要与2个字母组合的哪个种组合进行字符串拼接(该值还要与“lastLen”(上图红色lastLen)相加才能定位到该位置对应的字母),比如当前是第一轮遍历 则是A与AB进行拼接成AAB,这也就是上面举例的当前数组位置对应的字母(AAB)。假设我们用变量letterIdx表示第几轮,每上个组合遍历完一次letterIdx都要+1,表示下一个要拼接在前面的字母。因为拼接在前面的字母是A~Z 所以每次取该轮字母时都要跟26取余(letterIdx%26),当letterIdx%26=0时 说明A~Z都与上个组合拼接过了 也就是当前n个字母组合所有情况都组合过了,再进行下一轮n+1个(4个)字母的组合(上图黑色竖线箭头部分),这时currentLen变成了上一个组合的长度(上图黑色的currentLen),而lastLen变成了“上个组合的currentLen+lastLen”(上图黑色的lastLen部分),接下来的循环遍历跟上个组合一样进行。

    上代码:(代码里的注释请结合上文来看,注释里说到的“组合的情形”是指该组合的某一种组合,如BK、AH、XI都是2个字母组合的一种情形。因为实在也不知道应该用哪个词来表达)

    public final class Columns {
    
    	private Columns() {}
    
    	private static String[] sources = new String[]{
    		"A","B","C","D","E","F","G","H",
    		"I","J","K","L","M","N","O","P",
    		"Q","R","S","T","U","V","W","X","Y","Z"
    	};
    
    	/**
    	 * (256 for *.xls, 16384 for *.xlsx)
    	 * @param columnNum 列的个数,至少要为1
    	 * @throws IllegalArgumentException 如果 columnNum 超出该范围 [1,16384]
    	 * @return 返回[1,columnNum]共columnNum个对应xls列字母的数组
    	 */
    	public static String[] getColumnLabels(int columnNum) {
    		if(columnNum<1||columnNum>16384)
    			throw new IllegalArgumentException();
    		String[] columns = new String[columnNum];
    		if(columnNum<27){	//小于27列 不用组合
    			System.arraycopy(sources, 0, columns, 0, columnNum);
    			return columns;
    		}		
    		System.arraycopy(sources, 0, columns, 0, 26);	//前26列不需要进行组合
    
    		//因为基于数组是从0开始,每到新一轮letterIdx 会递增,所以第一轮 在递增前是-1
    		int letterIdx = -1;
    		int currentLen = 26;//第一轮组合(2个字母的组合)是分别与A-Z进行拼接 所以是26
    		int remainder;
    		int lastLen = 0;	//用于定位上文提到的i%currentLen实际在数组中的位置		
    		int totalLen = 26;	//totalLen=currentLen+lastLen
    		int currentLoopIdx = 0; //用来记录当前组合所有情形的个数
    
    		for(int i=26;i<columnNum;i++){ //第27列(对应数组的第26个位置)开始组合
    
    	//currentLen是上个组合所有情形的个数,与它取余找到要与上个组合的哪种情形进行拼接
    			remainder = currentLoopIdx%currentLen;
    
    			if(remainder==0){
    				letterIdx++; //完成一次上个组合的遍历,转到下个字母进行拼接
    				int j = letterIdx%26;
    
    			//A-Z 26个子母都与上个组合所有情形都进行过拼接了,需要进行下个组合的拼接
    				if(j==0&&letterIdx!=0){ 
    					lastLen = totalLen; //下个组合的lastLen是上个组合的totalLen
    
    				/**
    	 		     * 下个组合的currentLen是上个组合的所有组合情形的个数
    	 		     * (等于上个组合的currentLen*26),26也就是拼接在前面的A-Z的个数
    	 		     */			 
    					currentLen = 26*currentLen;
    
    					totalLen = currentLen+lastLen; //为下一轮的开始做准备
    					currentLoopIdx = 0; //到下一轮了 因此需要重置
    				}
    			}
    			/**
    	 	     * sources[letterIdx%26]是该轮要拼接在前面的字母
    	 	     * columns[remainder+lastLen]是上个组合被拼接的情形
    	 	     */		
    			columns[i] = sources[letterIdx%26]+columns[remainder+lastLen];
    			currentLoopIdx++;
    		}
    		return columns;
    	}
    }
    测试:
    public static void main(String[] args) {
    	String[] columns = getColumnLabels(37 );
    	System.out.println("1到37列:"+Arrays.toString(columns));
    	System.out.println();
    	long start = System.nanoTime();
    	columns = getColumnLabels(256);
    	System.out.println("创建"+columns.length+"列用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xls第"+columns.length+"列:"
    					   +columns[columns.length-1]);
    	System.out.println();
    	start = System.nanoTime();
    	columns = getColumnLabels(16384);
    	System.out.println("创建"+columns.length+"列用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xlsx第"+columns.length+"列:"
    					   +columns[columns.length-1]);
    }

    打印:
    1到37列:[A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, 
    U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK]
    
    创建256列用时(纳秒):192833
    xls第256列:IV
    
    创建16384列用时(纳秒):9574147
    xlsx第16384列:XFD

    ------------------------------------------------------分隔线-----------------------------------------------------------------

    后来有想到,如果是不需要(或者条件不允许)提前创建(这么大的)数组呢,这时需要通过列号直接获取该列对应的字母。于是又想 应该怎么转换。。。
    先看看从字母转数字的,比如BGQCV 转成数字(虽然xlsx最后一列是XFD,这里只讨论数字与字母的互转):该列标有5个字母,说明前面已经有4个字母、3、2、1个字母的全组合了 才会到5个字母的组合,于是W1=26^4+26^3+26^2+26^1,BGQCV 的第一个字母是B,说明前面有Axxxx的全组合了,于是有该组合数T1=1*(26^4)。再来看第二个字母是G,说明前面已经有BAxxx~BFxxx的全组合了,于是有该组合数T2=6*(26^3)。第三个字母是Q,说明前面已经有BGAxx~BGPxx的全组合了,于是有该组合数T3=16*(26^2)。第四个字母是C,说明前面已有BGQAx~BGQBx的全组合了,该组合数T4=2*(26^1)。最后一个字母是V,说明前缀是BGQC的组合BGQCA~BGQCV共有T5=22个。
    好了,BGQCV 所处的列数W=W1+T1+T2+T3+T4+T5=(26^4+26^3+26^2+26^1)+1*(26^4)+6*(26^3)+16*(26^2)+2*(26^1)+22 = 1048576。
    String[] sources = new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    数组sources作为我们解决问题的字母来源(当然也可以不定义数组而是用ASCII码)。
    现在知道了通过字母列标是如何求出其对应的第几列,我们把问题一般化:求第W列对应的列标。设第W列对应的字母有n个,根据上面的分析可知W1=26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1。我们规定A对应1,B对应2 ... Z对应26。设第1个字母对应数字是num_1,第二个字母对应的数字是num_2,...,第n个字母对应数字num_n。根据上面的分析 于是有T1=(num_1-1)*26^(n-1),T2=(num_2-1)*26^(n-2),...,Tn=(num_n-1)*26^0。
    整合起来,又因为26^0=1 于是有W=W1+T1+T2+...+Tn=(26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1)+(num_1-1)*26^(n-1)+(num_2-1)*26^(n-2)+...+(num_(n-1)-1)*26^1+(num_n-1)。
    除了最右边的字母(也就是第n个字母)对应的位置的数字num_n-1除外,其它字母对应的位置的数字均是26的倍数。于是  第一次W对26取余W%26的结果所对应的字母(还记得吗 我们用1代表A,2代表B,... ,26代表Z)就是最右边的字母。好了 现在已经求出了最右边的字母,还剩n-1个未知字母,采用同样的办法可求出次右边的字母:W-(num_n-1)然后再除以26,得到的结果再减去1(因为W1中存在26^1,其除以26后结果就是1,为了保证除了次右边字母对应的位置的数字外,其余各字母对应的位置的数字均是26的倍数),把结果赋回给W,这时求次右边的字母就跟求最右边的字母类似了:
    W-(num_n-1)=(26^(n-1)+26^(n-2)+26^(n-3)+...+26^2+26^1)+(num_1-1)*26^(n-1)+(num_2-1)*26^(n-2)+...+(num_(n-1)-1)*26^1
    然后两边除以26:(W-(num_n-1))/26=(26^(n-2)+26^(n-3)+26^(n-4)+...+26^1+1)+(num_1-1)*26^(n-2)+(num_2-1)*26^(n-3)+...+(num_(n-1)-1)
    然后两边再减去1:(W-(num_n-1))/26-1=(26^(n-2)+26^(n-3)+26^(n-4)+...+26^1)+(num_1-1)*26^(n-2)+(num_2-1)*26^(n-3)+...+(num_(n-1)-1)
    然后把左边的(W-(num_n-1))/26-1看成整体的W,是不是跟最开始求最右边字母的很类似?
    这样从右往左求出来的字符串 跟所要的结果恰好是相反的 所要需要反转。
    上代码:
    /**
     * 返回该列号对应的字母
     * @param columnNo (xls的)第几列(从1开始)
     */
    public static String getCorrespondingLabel(int columnNo){
    	if(columnNo<1/**||columnNo>16384**/)
    		throw new IllegalArgumentException();
    	String[] sources = new String[]{"A","B","C","D","E","F","G","H","I","J","K","L","M"
    		,"N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    	StringBuilder sb = new StringBuilder(5);
    	int remainder = columnNo%26;	//求最右边的字母
    	if(remainder==0){	//说明(num_n-1)=26,第26个字母是Z
    		sb.append("Z");
    		remainder = 26;	//因为接下来W-(num_n-1)也就是columnNo-remainder,所以需要把remainder赋值回26
    	}
    	else{  //如果最右边字母不是Z的话,就去sources数组相应的位置取字母,remainder不用变
    	  sb.append(sources[remainder-1]);
    	}
    	columnNo = (columnNo-remainder)/26-1;	//用来判断接下来是否还有其他字母
    
    	//当 当前循环是求最后一个字母时(从右往左),(columnNo-remainder)/26就会是0,再减1也就是-1。
    	//因此通过判断(columnNo-remainder)/26-1是否大于-1来判断结束
    	while(columnNo>-1){
    		remainder = columnNo%26;
    		sb.append(sources[remainder]);
    		columnNo = (columnNo-remainder)/26-1;
    	}
    
    	return sb.reverse().toString();	//因为是从右往左解析的 所以需要反转
    }


    测试:
    public static void main(String[] args) {
    	String label = getCorrespondingLabel(37 );
    	System.out.println("第37列:"+label);
    	System.out.println();
    	long start = System.nanoTime();
    	label = getCorrespondingLabel(256);
    	System.out.println("查找第256列对应字母 用时(纳秒):"
    					   +(System.nanoTime()-start));
    	System.out.println("xls第256列:"+label);
    	System.out.println();
    	
    	label = getCorrespondingLabel(16384);
    	
    	System.out.println("xlsx第16384列:"+label);
    }
    打印:
    第37列:AK
    
    查找第256列对应字母 用时(纳秒):7776
    xls第256列:IV
    
    xlsx第16384列:XFD
    这时又想到,求n列列标 用方法1好一点呢 还是用方法2循环n次好呢。。。
    方法1求数组的 对于26+26*26=702列以下,可以将求组合部分抽出来,减少不必要的求余运算multiple%26,因为这时multiple不会超过26。方法2也可以改成从0开始的 毕竟poi列数是从0开始的。不预定义字母数组的话 也可以用ASCII码来转换。
    -----------------------------------------------分隔线-----------------------------------------------------

    最终代码:

    /**
     * 
     * Excel列号转字母工具类
     * 
     */
    public final class Columns {
    
    	private Columns() {
    	}
    
    	private static String[] sources = new String[] { "A", "B", "C", "D", "E",
    			"F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    			"S", "T", "U", "V", "W", "X", "Y", "Z" };
    
    	/**
    	 * (256 for *.xls, 16384 for *.xlsx)
    	 * 
    	 * @param columnNum
    	 *            列的个数,从1开始
    	 * @throws IllegalArgumentException
    	 *             如果 columnNum 超出该范围 [1,16384]
    	 * @return 返回[1,columnNum]共columnNum个对应xls列字母的数组
    	 */
    	public static String[] getColumnLabels(int columnNum) {
    		if (columnNum < 1 || columnNum > 16384)
    			throw new IllegalArgumentException();
    		String[] columns = new String[columnNum];
    		if (columnNum < 27) {
    			System.arraycopy(sources, 0, columns, 0, columnNum);
    			return columns;
    		}
    		int multiple = -1;
    		int remainder;
    		System.arraycopy(sources, 0, columns, 0, 26);
    		int currentLoopIdx = 0;
    		if (columnNum < 703) {
    			for (int i = 26; i < columnNum; i++) {
    				remainder = currentLoopIdx % 26;
    				if (remainder == 0) {
    					multiple++;
    				}
    				columns[i] = sources[multiple] + columns[remainder];
    				currentLoopIdx++;
    			}
    		} else {
    			int currentLen = 26;
    			int totalLen = 26;
    			int lastLen = 0;
    			for (int i = 26; i < columnNum; i++) {
    				remainder = currentLoopIdx % currentLen;
    				if (remainder == 0) {
    					multiple++;
    					int j = multiple % 26;
    					if (j == 0 && multiple != 0) {
    						lastLen = totalLen;
    						currentLen = 26 * currentLen;
    						totalLen = currentLen + lastLen;
    						currentLoopIdx = 0;
    					}
    				}
    				columns[i] = sources[multiple % 26]
    						+ columns[remainder + lastLen];
    				currentLoopIdx++;
    			}
    		}
    
    		return columns;
    	}
    
    	/**
    	 * 返回该列号对应的字母
    	 * 
    	 * @param columnNo
    	 *            (xls的)第几列(从1开始)
    	 */
    	private static String getCorrespondingLabel(int columnNo) {
    		if (columnNo < 1/** ||columnNo>16384 **/
    		)
    			throw new IllegalArgumentException();
    
    		StringBuilder sb = new StringBuilder(5);
    		int remainder = columnNo % 26;
    		if (remainder == 0) {
    			sb.append("Z");
    			remainder = 26;
    		} else {
    			sb.append(sources[remainder - 1]);
    		}
    
    		while ((columnNo = (columnNo - remainder) / 26 - 1) > -1) {
    			remainder = columnNo % 26;
    			sb.append(sources[remainder]);
    		}
    
    		return sb.reverse().toString();
    	}
    
    	/**
    	 * 列号转字母
    	 * 
    	 * @param columnIndex
    	 *            poi里xls的列号(从0开始)
    	 * @throws IllegalArgumentException
    	 *             if columnIndex less than 0
    	 * @return 该列对应的字母
    	 */
    	public static String getIndexLabel(int columnIndex) {
    		return getCorrespondingLabel(columnIndex + 1);
    	}
    
    }
    展开全文
  • 在我的应用程序中,我加载的文本文件结构如下:第一个非数字列(ID)一些非数字列(字符串)若干数值(浮点数)非数字列的数目是可变的。当前,我将数据加载到这样的数据框中:source = pandas.read_table(inputfile, ...

    本问题已经有最佳答案,请猛点这里访问。

    在我的应用程序中,我加载的文本文件结构如下:

    第一个非数字列(ID)

    一些非数字列(字符串)

    若干数值列(浮点数)

    非数字列的数目是可变的。当前,我将数据加载到这样的数据框中:

    source = pandas.read_table(inputfile, index_col=0)

    我想一次性删除所有非数字列,而不知道它们的名称或索引,因为这可以读取它们的数据类型。这对熊猫来说是可能的还是我必须自己做饭?

    相关:stackoverflow.com/q/25039626/5069869

    为了避免使用私有方法,您还可以使用select_dtypes,其中可以包含或排除所需的数据类型。

    在这篇文章中碰到的是同一件事。

    或者在您的情况下,具体来说:source.select_dtypes(['number']) or source.select_dtypes([np.number]。

    我认为这比使用私有方法要好。也许您应该添加问题的直接答案,即:source。请选择"类型"(["数字")或"来源"。请选择"类型"([numpy.number])

    这应该是公认的答案,尽管另一个也可以,但这更正确,更不用说私有方法(不是API的一部分)可能随时更改。

    这不是返回布尔值吗?另外,"数字"和"np.number"有什么不同(只是一个数字数组?)

    这是一个私有方法,但它可以做到这一点:source.u get u numeric u data()。

    In [2]: import pandas as pd

    In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]})

    In [4]: source

    Out[4]:

    A  B       C

    0  foo  1  (1, 2)

    1  bar  2  (3, 4)

    In [5]: source._get_numeric_data()

    Out[5]:

    B

    0  1

    1  2

    谢谢,效果不错。

    谢谢!在熊猫身上使用"私人方法"有什么预防措施吗?或者,或者,为什么这是私人的?(如果你建议的话,我可以打开一个新问题。)

    一般来说,添加/删除/更改私有方法的API不被视为(类)API/行为更改。换句话说,一个新版本的熊猫被认为是向后兼容的,可以删除一个私有方法。我相信_get_numeric_data()主要用于支持绘图函数/方法。如果你觉得这是一个有用的方法,你可以在Github上做一个特性请求,要求它成为公共API的一部分。

    我还有另一个可能的解决方案,可以删除具有2行代码的类别值的列,定义具有类别值的列(第一行)的列表,并使用第二行删除它们。df是我们的数据框架

    下降前测向:

    to_be_dropped=pd.DataFrame(df.categorical).columns

    df= df.drop(to_be_dropped,axis=1)

    下降后测向:氧化镁

    这将删除不包含float64数字的每列。

    df = pd.read_csv('sample.csv', index_col=0)

    non_floats = []

    for col in df:

    if df[col].dtypes !="float64":

    non_floats.append(col)

    df = df.drop(columns=non_floats)

    展开全文
  • mysql中要写入数字可以用什么类型

    千次阅读 2021-01-19 07:00:37
    MySQL支持所有标准的SQL数值数据类型,我们可以在写入数字时使用这些类型。这些类型包括数值数据类型INTEGER、SMALLINT、DECIMAL、NUMERIC和近似数值数据类型FLOAT、REAL、DOUBLE 、PRECISION。其中关键字INT是...
  • 将excel表中的字母改为数字

    千次阅读 2020-04-26 21:16:45
    也就是在openpyxl的编程中,是用数字表示的,而不是用字母。我要处理的这个excel有上百,用字母表示不合适,毕竟不能一个一个从左到右去数。所以我需要把表示数的字母变成数字,方法如下: 1、 点击Excel ...
  • 最近在复习c语言,看到二维数组的定义时,有省略行的定义方法,如arr[][10],但为什么没有省略定义方法呢? 我个人理解是:将一个二维数组看成若干一维数组,每一行就是一个一维数组,而二维数组的就代表每个一维数组...
  • 从键盘接受一个数字出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。 处理方法: 1、定义一个字符串数组,保存汉字数字 2、然后将传入的数字转换成字符串,...
  • select * from table order by n,m; n ,m表示select里面的第n,m个字段,整段sql的意义是:查询出来的结果,按照第n,m个字段排序
  • 使用map的方法就可以实现把某一的字符类型的值转换为数字。...首先定义一个字典,然后使用map方法就可以把某一的字符类型的值转换为数字。 以上就是对使用pandas把某一的字符值转换为数字的认识。 ...
  • linux权限从左至右,第一位数字代表文件所有者的权限,第二位数字代表同组用户的权限,第三位数字代表其他用户的权限。而具体的权限是由数字来表示的。读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的...
  • 图像理论知识_什么是数字图像处理?

    万次阅读 多人点赞 2018-04-21 16:54:26
    数字图像处理,即数字,将图像转化为数字的形式,对图像做处理,我们平时所见到的图像,在计算机中都是一组数字,当通过相机捕获现实世界的景物时,相机会捕获现实世界的光源信号,并转化为数字信号保存到存储器上,...
  • 整数数组索引整数索引有助于基于 N 维索引来获取数组中任意元素。每个整数数组表示该维度的下标值。当索引的元素个数就是目标 ndarray 的维度时,会变得相当直接...也可以利用数字索引生成同样维度的数组,如下获取...
  • syms是定义局部变量(能定义多个符号变量),如 syms x real %定义x为实数变量 sym是定义局部变量(只能定义一个符号变量),如 x = sym('x','real'); %定义x为实数变量 global是定义全...答:syms就是定义一些符号变量...
  • 在 SQL 数据库中,生成(Generated Column)是指由表中其他字段计算得到的,因此也称为计算(Computed Column)。 本文介绍各种主流数据库对于生成/计算的实现,包括 Oracle、MySQL、SQL Server、...
  • dataframe如何定义列名称

    千次阅读 2021-12-09 19:55:38
    如果本来就是df,本来是数字索引名称,原本没有名称用如下代码 df_tongji.columns=['主机名','服务名称','进程号'] df-tongji是你要处理的dataframe 再如果是原来有列名,你想换个列名,那就用rename函数,这里
  • 表示索引中使用的字节数,可通过该计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确性的情况下,...
  • ls -l 每一含义

    千次阅读 2018-11-04 22:22:06
    10个字符确定不同用户能对文件干什么 第一个字符代表文件(-)、目录(d),链接(l) 其余字符每3个一组(rwx),读(r)、写(w)、执行(x) 第一组rwx:文件所有者的权限是读、写和执行 ...
  • 2015/12/15 C/C++学习指南MySQL篇 1.4 表的定义列属性 作者邵发 官网 的属性 每个有以下属性 1. 列名建议以英文命名 2. 数据类型(整数小数字符串日期等 3. 长度: (当为字符串类型需指定长度) 4. 主键 5. 非空...
  • mysql中varchar是什么类型

    千次阅读 2021-01-20 01:23:40
    如果字符串最大长度比平均长度大很多的,那么就可以使用varchar来储存。varchar类型(推荐教程:mysql教程)varchar是可变长度的类型:在varchar(M)类型的数据列里,每个值只占用刚好够用的字节,再加上一个用来...
  • pandas DataFrame方法 dataframe 定义一个数值全为1的 dataframe创建多;如何拆分嵌套list存为dataframe;在数据集添加一个新的
  • 下面蜜姐就来给大家通俗的讲解一下什么是数字货币主流币? 数字货币主流币是什么意思? 主流币,如同字面意义所说,是受到币圈主流认可的数字货币。主流币的概念比较模糊,简单的说就是大多数人都知道这个币,而且认
  • r语言如何将多数据变成一

    千次阅读 2021-05-25 07:19:12
    1.R语言如何将10*10的数据一次排到第一成100*1#R中的matrix默认情况下是按填写数字的df df[,1] [,2][1,] 1 6[2,] 2 7[3,] 3 8[4,] 4 9[5,] 5 10# 如果数据为matrix结构,直接as.vector, 变为vector之后可以用as...
  • 数字图像基本概念 一

    千次阅读 2021-02-01 11:01:45
    数字图像基本概念数字图像的基本概念图像的获取图像的颜色图像和图形的区别如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释...
  • 对于这个问题,相信很多人都会很困惑,本篇文章将会给大家介绍一种非常简单的方式向DataFrame中任意指定的位置添加一。在此之前或许有不少读者已经了解了最普通的添加一的方式,如下:import pandas as ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 533,596
精华内容 213,438
关键字:

列数字的定义是什么