首页 开发编程 正文

php数字怎么相加

请问在PHP中如何计算这个求和公式Sn?(1-x)[1+x+x^2+...+x^(n-1)]=1-x^n.其实这个一般化的公式也很好理前一个因式只有两项,而积的绝对值正好与后一因式向后错开了一位.这样除了1和-x^n没有对应的互为相反的值以外,中间的值全部正负抵消了.这么一个多项式乘法的一般化公式,foreach在php5里只需要走一...

php数字怎么相加,请问在PHP中如何计算这个求和公式Sn?

Sn=a1*(1-pow(q, n))/(1-q)

等比公式的通项公式是比较容易理解的,因为当公比是q的时候,a[2]=a[1]q,a[3]=a[2]q=a[1]q*q=a[1]q^2,依次类推就得到:a[n]=a[1]q^(n-1).这样S[n]=a[1]+a[2]+a[3]+...+a[n]=a[1][1+q+q^2+...+q^(n-1)].那么怎样用初中知识推导出等比数列求和公式呢?这里,首先要讲一下一个多项式的乘法公式.我们知道:(1-x)(1+x)=1-x^2,(1-x)(1+x+x^2)=1-x^3,依次类推,就有:(1-x)[1+x+x^2+...+x^(n-1)]=1-x^n.其实这个一般化的公式也很好理前一个因式只有两项,当用1去乘后一因式的时候,后一个因式保持不变,当用-x去乘后一个因式的时候,积的符号正好相反,而积的绝对值正好与后一因式向后错开了一位.这样除了1和-x^n没有对应的互为相反的值以外,中间的值全部正负抵消了.这么一个多项式乘法的一般化公式,对于初中的学生来讲应该还是可以理解的,只是初步接触一个项数较多,以至于要用省略号来表示的因式时,稍感突兀一点罢了.有了这么一个多项式乘法的一般化公式,再来看等比数列求和公式,那就是水到渠成了:S[n]=a[1]+a[2]+a[3]+...+a[n]=a[1][1+q+q^2+...+q^(n-1)]=a[1][1+q+q^2+...+q^(n-1)](1-q)/(1-q)=a[1](1-q^n)/(1-q)

php数组用foreach循环后?

foreach在php5里只需要走一遍链表,php7只要顺序遍历一遍bucket数组。while循环要走hash find

如何快速精通python?

既然是毫无基础,那就简单介绍一下吧,python的入门其实只需要掌握几个关键点就行,新手要先学会安装环境、了解数据结构、函数这些东西,再配合实操进行实践,基本就可以入门了。

提示!!文章内容较长,大约需要半个小时,可以先收藏再慢慢看,目录如下:

一、了解环境

二、了解数据结构

三、了解基本函数

四、了解Nuypm计算包

——————正文警告!!——————

一、环境

Python的编写环境,用Anaconda足矣。Anaconda是专业的数据科学计算环境,已经集成绝大部分包和工具,不需要多余的安装和调试。

Python版本建议3.0以上,不要选择2.7的版本,否则你会被无尽的中文编码问题困扰。

Anaconda在官网下载,选择最新版本,约400MB。

完成安装后,Win版本会多出几个程序,Mac版本只有一个Navigator导航。数据分析最常用的程序叫Jupyter,以前被称为IPython Notebook,是一个交互式的笔记本,能快速创建程序,支持实时代码、可视化和Markdown语言。

点击Jupyter进入,它会自动创建一个本地环境localhost。

点击界面右上角的new,创建一个python文件。

开始你的Python

界面上部是工具栏,编辑撤回运行等,下面是快捷操作,大家以后会熟悉的。页面正中便是脚本执行的地方,我们输入自己第一行代码吧:

(我就不用hello world)灰色框是输入程序的地方,回车是换行,shift+回车执行灰色区域的代码,它的结果会直接在下面空白处出现。这就是Jupyter交互式的强大地方,将Python脚本分成片段式运行,尤其适合数据分析的摸索调整工作。

这里的print叫函数,和excel的函数同理,是程序执行的主体,负责将输入转化成输出(函数留在下一篇细讲)。这里将hello qinlu这段文字输出。新手可能会奇怪为什么要加引号,这种用引号括起来的文字在程序中叫字符串。

Python是一门计算机语言,它的逻辑和自然语言不一样,编程语言的目的是执行任务,所以它不能有歧义。为了规避各种歧义,人们创造了语法规则,只有正确的语法,才能被转换成CPU执行的机器码。

先了解Python语法中的数据类型。计算机最开始只被用于数值运算,后来被赋予了各种丰富的数据类型。

上面两个是小学生都会的四则运算,在计算机语言中可没有那么简单。它涉及了两个数值类型,整数int和浮点数float。整数和浮点数在计算机内部存储的方式是不同的,我们不用知道具体原理,明确一点,整数运算是永远精确的,浮点运算则可能有误差。

两种数据类型也可以互换,通过int函数和float函数。

有了数值,必然有文本,程序中叫字符串,用英文引号括起来表示。单引号和双引号没有区别,所以"qinlu"和'qinlu'是等价的,引号是边界,输出的时候不会包含它。当字符串内本身包含引号时,也不影响使用。

需要注意的是,不论单引号还是双引号,一旦混用很容易出现错误。因为程序并不知道它是字符串的边界还是符号。

解决方法有两种,一种是使用三引号,三引号代表整体引用,而且包含换行。第二种是引号前面加\,它是转义字符,表示这个引号就是单纯的字符。

三引号也可以用来注释,通常是大段的文字解释,如果一句话,我们更习惯用#,#后面的内容均不会作为程序执行。

时间是特殊的数值类型,它将结合datetime模块讲解。

还有两个常见的数据类型,布尔值和空值。布尔值是逻辑判断值,只有True和False。

布尔值在IF语句和数据清洗中经常使用,利用其过滤。布尔值能和布尔值运算,不过这里是and、not、or作为运算符,Ttue and True = True,False and True = False,False and False = False,not True = False,True or False = True等。

空值是一个特殊的值,表示为None,None不等于0,0具有数学意义而None没有,None更多表示该值缺失。

整数,浮点数,字符串,布尔值,空值就是Python常见的数据类型。Python3对中文的支持比较友好,所以大家可以用中文作为字符串试一下print。

数据类型构成了变量的基础,变量可以是任意的数据类型。想要用变量,必须先赋予变量一个值,这个过程叫赋值。

我首先给a赋予了一个整数值1,然后改变它为字符串abc,变量在Python中没有固定的数值类型,这是Python最大的优点,所以它在数据分析中很灵活。这也是它被称为动态语言的原因,相对应的叫静态语言。

Python是大小写敏感的语言,所以a和A是有区别的,这点请牢记。另外变量名尽可能使用英文,不要拼音,英文的可读性是优于拼音的。

变量有两种拼写风格,一种叫驼峰,一种叫下划线,以用户ID为例。驼峰命名法为userId,以一串英文词语user和id组成变量,第一个词语的首字母小写,第二个词语开始的首字母均大写。下划线命名法为user_id,全部小写,用_分割单词。

一个变量的值可以被赋予另外一个变量,如果b变量之前有另外一个值,那么会被1覆盖。呈从上而下的执行关系。

初看a = a + 1好像有逻辑问题,其实这涉及到了程序执行的先后顺序,程序是先计算a+1的值得到2,然后将其赋予(覆盖)了a。等号右边的计算先于左边,这是从右到左的逻辑关系。

有变量,自然有常量,常量是固定不变的量,可是在Python中没有真正意义的常量,一切皆可变,它更多是习惯上的叫法,即一旦赋值,就不再改变了。

Python的基础数学运算符号有+,-,*,/,//,%。前面四个就是加减乘除,其中除法的结果一定是浮点数。后面两个符号是除法的特殊形式,//代表除法中取整数,%代表除法中取余数。

到这里,新手部分已经讲解完成。再来讲讲数据结构。

二、数据结构

Python一共有三大数据结构,它是Python进行数据分析的基础,分别是tuple元组,list数组以及dict字典。本文通过这三者的学习,打下数据分析的基础。

1、数组

数组是一个有序的集合,他用方括号表示。

num就是一个典型的数组。数组不限定其中的数据类型,可以是整数也可以是字符串,或者是混合型。

数组可以直接用特定的函数,函数名和Excel相近。

sum是求和,len则是统计数组中的元素个数。

上述列举的函数是数组内整体元素的应用,如果我只想针对单一的元素呢?比如查找,这里就要用到数组的特性,索引。索引和SQL中的索引差不多,都是用来指示数据所在位置的逻辑指针。数组的索引便是元素所在的序列位置。

注意,索引位置是从0开始算起,这是编程语言的默认特色了。num[0]指数组的第一个元素,num[1]指数组的第二个元素。

我们用len()计算出了数组元素个数是5,那么它最后一个元素的索引是4。若是数组内的元素特别多呢?此时查找数组最后一位的元素会有点麻烦。Python有一个简易的方法,可以用负数表示,意为从最后一个数字计算索引。

这里的num[4]等价于num[-1],num[-2]则指倒数第二个的元素。

再来一个新问题,如何一次性选择多个元素?例如筛选出数组前三个元素。在Python中,用:表示范围。

num[0:3]筛选了前三个元素,方括号左边是闭区间,右边是开区间,所以这里是num[0],num[1]和num[2],并不包含num[3]。这个方法叫做切片。

上述是索引的特殊用法,[0:]表示从第0个索引开始,直到最后一个元素。[:3]表示从第一个元素开始,直到第3个索引。

负数当然也有特殊用法。[-1:]表示从最后一个元素开始,因为它已经是最后一个元素了,所以只返回它本身。[:-1]表示从第一个元素开始到最后一个元素。num[-2:-1]和num[-3:-1]大同小异。

数组的增删查

我们已经了解数组的基本概念,不过仍旧停留在查找,它不涉及数据的变化。工作中,更多需要操纵数组,对数组的元素进行添加,删除,更改。

数组通过insert函数插入,函数的第一个参数表示插入的索引位置,第二个表示插入的值。

另外一种方式是append,直接在数组末尾添加上元素。它在之后讲到迭代和循环时应用较多。

如果要删除特定位置的元素,用pop函数。如果函数没有选择数值,默认删除最后一个元素,如果有,则删除数值对应索引的元素。

更改元素不需要用到函数,直接选取元素重新赋值即可。

到这里,数组增删改查已经讲完,但这只是一维数组,一维数组之上还有多维数组。如果现在有一份数据是关于学生信息,一共有三个学生,要求包含学生的姓名,年龄,和性别,应该怎么用数组表示呢?

有两种思路,一种是用三个一维数组分别表示学生的姓名,年龄和性别。

学生属性被拆分成多个数组,利用索引来表示其信息,这里的索引有些类似SQL的主键,通过索引查找到信息。但是这种方法并不直观,实际应用会比较麻烦,更好的方法是表示成多维数组。

所谓多维数组,是数组内再嵌套数组,图中表示的是一个宽度为3,高度为3的二维数组。此时student[0]返回的是数组而不是单一值。这种方法将学生信息合并在一起,比第一个案例更容易使用。

如果想选择第一个学生的性别,应该怎么办呢?很简单,后面再加一个索引即可。

现在尝试快速创建一个多维数组。

[0]*3将快速生成3个元素值为0的数组,这是一种快捷操作,而[row]*4则将其扩展成二维数据,因为是4,所以是3*4的结构。

这里有一个注意点,当我们想更改多维数组中的某一个元素而不是数组时,这种方式会错误。

按照正常的想法,martix[1][0]将会改变第二个数组中的第一个值为1,但是结果是所有数组的第一个值都变成1。这是因为在matrix = [row] * 4操作中,只是创建3个指向row的引用,可以简单理解成四个数组是一体的。一旦其中一个改变,所有的都会变。

比较稳妥的方式是直接定义多维数组,或者用循环间接定义。多维数组是一个挺重要的概念,它也能直接表示成矩阵,是后续很多算法和分析的基础(不过在pandas中,它是另外一种形式了)。

2、元组

tuple叫做元组,它和数组非常相似,不过用圆括号表示。但是它最大的特点是不能修改。

当我们想要修改时就会报错。

而选择和数组没有差异。

元组可以作为简化版的数组,因为它不可更改的特性,很多时候可以作为常量使用,防止被篡改。这样会更安全。

3、字典

字典dict全称dictionary,以键值对key-value的形式存储。所谓键值,就是将key作为索引存储。用大括号表示。

图中的'qinlu'是key,18是value值。key是唯一的,value可以对应各种数据类型。key-value的原理不妨想象成查找字典,拼音是key,对应的文字是value(当然字典的拼音不唯一)。

字典和数组的差异在于,因为字典以key的形式存储和查找,所以它的查询速度非常快,毕竟翻字典的时候你只要知道拼音就能快速定位了。对dict数据结构,10个key和10万个key在查找对应的value时速度没有太大差别。

这种查找方式的缺点是占用内存大。数组则相反,查找速度随着元素的增加逐渐下降,这个过程想象成程序在一页页的翻一本没有拼音的字典,直到找到内容。数组的优点是占用的内存空间小。

所以数组和字典的优缺点相反,dict是空间换时间,list是时间换空间,这是编程中一个比较重要的概念。实际中,数据分析师的工作不太涉及工程化,选用数组或者字典没有太严苛的限制。

细心的读者可能已经发现,字典定义时我的输入顺序是qinlu,lulu,qinqin,而打印出来是lulu,qinlu,qinqin,顺序变了。这是因为定义时key的顺序和放在内存的key顺序没有关系,key-value通过hash算法互相确定,甚至不同Python版本的哈希算法也不同。这一点应用中要避免出错。

既然字典通过key-value对匹配查找,那么它自然不能不用数组的数值索引,它只能通过key值。

如果key不存在,会报错。通过in方法,可以返回True或False,避免报错。

dict和list一样,直接通过赋值更改value

能不能更改key的名字?不能,key一旦确定,就无法再修改,好比字典定好后,你能修改字的拼音么?

dict中删除key和list一样,通过pop函数。增加key则是直接赋予一个新的键值对。

dict的keys和values两个函数直接输出所有的key值和value值。如果要转换成数组,则再外面嵌套一个list函数

items函数,将key-value对变成tuple形式,以数组的方式输出。

字典可以通过嵌套应用更复杂的数据格式,和NoSQL与JSON差不多。

基础的数据类型差不多了,更多函数应用大家可以网上自行查阅文档,这块掌握了,在数据清洗过程中将会非常高效,尤其是读取Excel数据时。当然不要求滚瓜烂熟,因为后面将学习更加强大的Numpy和Pandas。

三、基本函数

1. 函数是什么

函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用(Calling)函数。

在 Python 中,函数可以通过关键字 def 来定义。这一关键字后跟一个函数的标识符名称,再跟一对圆括号,其中可以包括一些变量的名称,再以冒号结尾,结束这一行。随后而来的语句块是函数的一部分。

在定义函数时给定的名称称作“形参”(Parameters),在调用函数时你所提供给函数的值称作“实参”(Arguments)。

2. 调用函数

要调用一个函数,需要知道函数的名称和参数。函数的参数只是输入到函数之中,以便我们可以传递不同的值给它,并获得相应的结果。

Python 内置的常用函数包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数。用input()读取用户的输入:

因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python 提供了int()函数来完成这件事情:

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:

如果函数调用出错,一定要学会看错误信息。

3.定义函数

在 Python 中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

在 Python 交互环境中定义函数时,注意 Python 会出现...的提示。函数定义结束后需要按两次回车重新回到>>>提示符下:

如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python 解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)。

定义一个什么事也不做的空函数,可以用pass语句:

pass语句什么都不做,实际上它可以用作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

pass还可以用在其他语句里,比如:

缺少了pass,代码运行就会有语法错误。

数据类型检查可以用内置函数isinstance()实现。

Python 的函数返回多值其实就是返回一个tuple;Python 函数返回的是单一值时,返回值仍然是一个tuple。但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值。函数可以同时返回多个值,但其实就是一个tuple。

函数执行完毕也没有return语句时,自动return None。

4.函数的参数

Python 的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

4.1 位置参数:

power(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。

4.2 默认参数:

对于一些函数来说,你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符=来为参数指定默认参数值。要注意到,默认参数值应该是常数。更确切地说,默认参数值应该是不可变的。

n = 2 是默认参数

定义默认参数要牢记一点:默认参数必须指向不变对象。且只有那些位于参数列表末尾的参数才能被赋予默认参数值,意即在函数的参数列表中拥有默认参数值的参数不能位于没有默认参数值的参数之前。

4.3 可变参数:

有时你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现。即传入的参数个数是可变的。

我们声明一个诸如 *param 的星号参数时,从此处开始直到结束的所有位置参数(Positional Arguments)都将被收集并汇集成一个称为param的元组(Tuple)。

类似地,当我们声明一个诸如 **param 的双星号参数时,从此处开始直至结束的所有关键字参数都将被收集并汇集成一个名为 param 的字典(Dictionary)。

4.4 关键字参数:

如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是关键字参数(Keyword Arguments)——我们使用命名(关键字)而非位置来指定函数中的参数。

关键字参数允许你传入 0 个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

举个例子,扩展函数的功能。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去:

4.5 命名关键字参数:

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义函数并调用:

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错。

使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python 解释器将无法识别位置参数和命名关键字参数,即缺少 *,city和job被视为位置参数。

4.6 参数组合:

在 Python 中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这 5 种参数都可以组合使用。

但是参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。虽然可以组合多达 5 种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

通过一个tuple和dict,你也可以调用函数:

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

5. 递归函数

如果一个函数在内部调用自身本身,这个函数就是递归函数。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

通过下面的代码可以查看你的电脑最大算到多少:

解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。

尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

要改成尾递归方式,需要多一点代码,主要是要把每一步的乘积传入到递归函数中。Python 标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题

四、了解Mumpy包

Python数据分析绝对绕不过的四个包是numpy、scipy、pandas还有matplotlib。

numPy是Python数值计算最重要的基础包,大多数提供科学计算的包都是用numPy的数组作为构建基础。专门用来处理矩阵,它的运算效率比列表更高效。

1、NumPy 的 ndarray:多维数组对象

numpy的数据结构是n维的数组对象,叫做ndarray。可以用这种数组对整块数据执行一些数学运算,其语法跟标量元素之间的运算一样。

创建并操作多维数组:

"/>

这里没写 np.float64 只写了 float,但是NumPy会将 Python 类型映射到等价的dtype上。

数组的dtype的另一个用法:

"/>

u4(unit32):无符号的 32 位(4个字节)整型。

调用astype无论如何都会创建出一个新的数组(原始数据的一份拷贝)。

浮点数只能表示近似的分数值,在复杂计算中可能会积累一些浮点错误,因此比较操作只在一定小数位以内有效。

4、数组和标量之间的运算

数组:可对数据执行批量运算(不用编写循环即可)。这通常叫做矢量化(vectorization)。

大小相等的数组之间,它们之间任何的算术运算都会应用到元素级(每个元素都做这个运算了),数组与标量的算术运算也是。不同大小的数组之间的运算叫做广播(broadcasting)。

5、索引和切片

数据不会被复制,任何修改都直接改了原数组。

如果仅是要一份副本,则用 .copy()。

对二维数组单个元素的索引:

这两种方式等价。

若arr2d[2],则输出的是一维数组[7,8,9]。

2*2*3的数组(2组2行3列):

6、布尔型索引

需要先引入:from numpy.random import randn

或将代码改成:data = np.random.randn(7, 4)

布尔型数组的长度必须跟被索引的轴长度一致。每个名字对应 data 数组一行。

对条件进行否定的两种方式:

组合应用多个布尔条件,可使用&、|等布尔算术运算符

通过布尔型索引选取数组中的数组,将总是创建数据的副本,即使返回一模一样的数组也是一样。

通过布尔型数组设置值:

通过一维布尔数组设置整行或列的值:

7、花式索引

指利用整数数组进行索引。

np.empty((8,4))

Return a new array of given shape and type, without initializing entries.

for i in range(8):

arr[i] = i

Return an object that produces a sequence of integers from start (inclusive)

to stop (exclusive) by step

为了以特定顺序选取行的子集,只需传入一个用于指定顺序的整数列表或 ndarray,使用负数索引会从末尾开始选取行(最后一行是 -1)。

一次传入多个索引组,返回一个一维数组:

取整列的两种方法,相当于给列排了顺序:

花式索引跟切片不一样,总是将数据复制到新数组中。

数组转置和轴对换

转置返回的是源数据的视图,不进行任何复制操作。数组有 transpose 方法,还有一个 T 属性来完成转置:

8、高维数组

Transpose 要一个轴编号:

<img class="capture deal" src="//s3.pstatp.com/wenda/wenda_web/static/style/image/loading_a788ad0.gif" _src="data:image/svg+xml;utf8,<svg xmlns=" http:="" www.w3.org="" 2000="" svg'="" width="640" height="462">"/>

arr是 2 组 2 行 4 列的数组,transpose的参数表示shape的形状,对于这个例子来说,即2[0]、2[1]、4[2],transpose(1,0,2)转置后变为2[1]、2[0]、4[2],看起来仍是 2 组 2 行 4 列的形状,但数组内的元素经过转换后索引已经改变,也要遵循(1,0,2)的顺序。如转置前的数组arr[0,1,0]索引值为 4,转置后的数组arr'[1,0,0],索引值才为 4。其它同理。

ndarray 的 swapaxes 方法接受一对轴编号且返回源数据的视图:

"/>

np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x, y)对。

将条件逻辑表述为数组运算

np.wherea函数是三元表达式x if condition else y的矢量化版本。

np.where的第二个和第三个参数不必是数组,传递给where的数组大小可以不相等,甚至可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。

用where表述出更复杂的逻辑:(where的嵌套)

"/>

10、排序

多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort:

顶级方法np.sort返回的数组已排序的副本,就地排序则会修改数组。

唯一化以及其他的集合逻辑

np.unique找出数组中的唯一值并返回已排序的结果

np.in1d用于测试一个数组的值在另一个数组的情况。

手机上可以用来学习编程的软件有哪些?

这个看你选择哪门编程语言了,这里我就Python,Java,C/C++,Html用到的手机软件简单介绍一下,主要内容如下:

1.Python:这里可以下载QPython3这个软件,集成了Python3解释器、Python Shell控制台、QEdit编辑器,还可以通过QPYPI安装第三方库(kivy等),开发简单的安卓应用,下面我简单介绍一下这个软件的安装和使用:

下载QPython3:这个直接在手机应用上搜索下载就行,如下,直接点击安装:

安装成功后,打开这个软件,有两种编程方式,一种是Console控制台,一种是QEdit编辑器,前者就是命令行的Python,后者可以直接编写py脚本并运行:

控制台效果:

QEdit编辑器效果:

程序运行截图如下,类似简单的安卓界面:

如果需要安装第三方库的话,可以直接在QPYPI中点击安装就行,如下:

2.Java:这里可以直接下载AIDE这个软件,集成了Java运行环境,界面美观、漂亮,支持代码高亮、自动补全、语法提示功能,既可以编写Java程序,也可以开发简单的安卓应用和游戏,使用起来非常不错,下面我简单介绍一下这个软件:

下载AIDE:这个直接到手机商店中搜索就行,与上面的QPython类似:

安装成功后,打开这个软件,我们就可以新建项目了,包括基本的Java项目,也包括安卓App等:

官方自带有简单的入门教程,直接点击就能学习,非常适合初学者:

3.C/C++:这里有2个软件可供下载,一个是C4droid(需要root),一个是C语言编译器(不需root),这2个软件使用起来都还不错,下面我简单介绍一下:

C语言编译器:这个直接搜索安装就行,如下:

安装完成后,打开软件,就可以测试运行程序了,如下:

C4droid:这个直接搜索C++编译器,就能找到,如下:

安装完成后,需要下载GCC编译器,才能正常编辑运行,安装完成后,就可以编写运行C/C++程序了:

4.Html:这个可以直接下载w3cschool编程学院,可以一边看教程,一边在线编辑运行代码,使用起来非常方便,下面我简单介绍一下这个软件:

下载w3cschool编程学院,这个直接搜索安装就行,如下:

安装成功后,打开这个软件,搜索html(其他语言,像python,php,java等也可以找到相应资料),就能找到html教程,目录结构如下:

在线编辑运行代码效果如下:

5.最后就是Termux了,一个高级终端,类似一个手机版的Linux,安装相关插件后,可以直接编辑运行C/C++,Python,Ruby等程序,使用起来也非常方便:

下载的话,直接在手机应用中搜索就行,如下,初始启动,需要等待一段时间:

安装成功后,安装相关插件后(pkg install clang,python,ruby等),就可以编辑运行程序了,如下,Python程序:

目前,就分享这几个软件吧,感兴趣的话,可以在自己手机上下载安装一下,试着玩玩,不过,如果真的想学习编程的话,建议还是在电脑上进行,调试运行更方便,手机就当一个偶尔学习的途径,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言。

有哪些对大学生有用的APP?

2018又过去了一大半,不知道你年初定下的诸如“多看书多看报,早起早睡休息好”的目标有没有进展?平常如果工作学习中的硬性任务太多,完成以后就想放纵自己熬夜玩“刷”,没空搭理自己年初定下的目标。但还有些时候是因为安排规划没做好,才让一些原本可以利用起来的琐碎时间耗在了无限的动态刷新上。

虽然手机常常被diss成原罪一样的存在,但毕竟大多数人是做不到脱机的,所以还是想着如何更好地对手机进行正利用会比较现实!

作为某top2高校的一枚小学渣,西西求助了身边的学霸们,再结合自己有限的学习经验,从以下三个part给大家推荐一些有价值且好用的app,附带推荐一些方便的小工具和优质课程,助大家早日完成自己的年度目标,时间不多了,赶紧收藏吧!

目录读书与学习艺术修养时间管理读书与学习

用手机学习的时间常常是碎片化时间,比如通勤时间、排队等人的时间。网上有很多关于碎片化时间学习的理论和方法,西西觉得只要记住一句话——

在碎片化的时间里完成体系化的、有重点的、周期性的学习任务。

而不是想起什么就看什么,手边有什么就学什么,就比如通勤时间里随意浏览一两篇公众号推送、看几条今日热点的新闻、突然想起来背几个单词,这就属于比较碎片化的学习。

关于碎片化时间学习,西西提供几个比较有效的tips:

固定使用1~3个觉得最有价值的app,用每日的空闲时间读完最近更新内容即可。完整系统地学完一个课题,任务可分散到长段时间的每一天。进行记忆类而不是思考类的任务。思考的时间最好保证完整且长,避免被打断。

Coursera

Coursera是一个免费大型公开在线课程平台,由美国斯坦福大学两名计算机科学教授创办。它的首批合作院校包括斯坦福大学、密歇根大学、普林斯顿大学等美国名校。

Coursera的首页是课程分类和搜索界面,可以直接点自己感兴趣的课来听。“建议”这一part就是根据你注册的时候选择的感兴趣的领域进行推荐的课程,类似于你的教学培养方案。搜索时可以选择语言,不过大部分是英文授课,所以很多人也用它来锻炼英语听读能力~

电脑搜索界面

如果你选了某门课,最好是在规定时间内把它系统地学完,这样收获才会更大。比如你可以用一个月的早通勤时间看一门课程,用晚通勤时间来回顾。中国类似Coursera的平台是网易公开课,如果想听一些中国名校的课程可以选后者~

得到

「得到」是一个定位为高效知识服务的app,提倡利用碎片化时间学习。

App里的课程主要分为上图所示的六个领域,每个领域的课程大约在几门到十几门左右。网上对课程内容的评价褒贬不一,毕竟每个人的知识储量、获取知识的渠道和方法以及学习的兴趣和能力都不一样,使用感受会有差别。但个人觉得从讲师的学术教育背景和课程设置来看,部分课程的质量还是很有保障的。

比如薛兆丰老师的这门经济学课,一共有200多讲,每一讲会讲1~2个概念,或者围绕某个问题进行讲解。知识点系统全面,讲解也很生活化,举的例子都很好理解,满足非经济专业人士的需求可以说是绰绰有余。

除了课程服务,得到还有一个每天听本书的功能,时长基本在20~30分钟之内,内容主要是作者对某本书的解读,你可以把它当作荐书和导读来看。

听音读文这个功能非常适合在吵闹的环境下使用,因为听着老师的声音比较有场景感,可以很快地把精力集中在文字内容上。

单读

最开始是在微信公众号上关注的「单读」,因为文体丰富独特,文风沉静深入,所以一直都比较爱看,后来下载单读的app以后,就更喜欢它了。

单读的主界面就像一本小书,上面是封面,下面是标题和几句简短的导语。内容往往是聚焦一位名家或者一个作品,涉及的领域和主题非常广。看完一篇文章上滑切换卡片就行,文字和图片的搭配干净利落,阅读体验特别好。

因为提倡用新的视角和文体阅读世界,所以app里的文字内容常常和图片、影像、音频同时出现,有读诗的文章,也有鉴赏音乐和电影的文章等等。长按文本还可以记笔记和随想~

之前大火的单向历其实就是他家出品的周边产品。每一天都附有大师箴言和宜忌指南,被称为“新青年的老黄历”,买一本放在书桌上每天撕一张,还挺有仪式感的~

TED

虽然TED已经被当作英语学习软件推荐过很多次,但是西西还是想再次安利一下TED,不过个人觉得比起用TED学英语,理解演讲者的思想要更重要一些。

相比其他视频网站上的TED合集,西西建议用TED自己出的app,可以及时看到更新,而且画质也很感人。TED的播放进度可以以15秒为一个单位进行快速调整,差不多就是1~2个长句的时间,这样比拖进度条要方便太多了。

字幕也可以随时点击左下的小红标切换甚至隐藏,不过有些视频没有中文字幕。你可以先看或先听一遍英文版,懂个大概,再看一遍中文字幕版,这样既可以练习英语,也可以加深对演讲内容的印象。

之前西西喜欢的一个港大博主@Elfa-分享过用iPad分屏看TED的方法,一半屏幕是视频播放界面,一半是笔记界面,可以记下一些自己觉得有意思的点或者不懂的单词,看完以后再一起整理,也是一个很好的方法,有iPad的朋友可以试下~

一席

一席是2012年于北京创立的独立媒体,内容大多是剧场式的现场演讲,结合网络视频进行传播,有点像中国版的TED。目前已有国内外近500位讲者和表演嘉宾登上过一席的舞台。

一席的话题类别也特别多,但比TED方便的是有分类tag的界面,可以只选择自己喜欢的领域看演讲,但视频制作和演讲环境相比TED就要差一些,观看感受没有TED那么好,不过内容还是不错的。

枝桠是一席的一档谈话节目,邀请过包括崔健、胡德夫、卢冠廷、林志炫、李银河在内的众多嘉宾。记录版块则是一席拍摄的纪录片,目前app里只有8部。感兴趣的朋友也可以下来看看~

幕布

读文章经常会需要摘抄和随想记录,读专业书籍更是需要整理思路和架构。出门在外不方便用电脑和笔记本时,用手机里的幕布app来进行快速的层级记录就很方便。

幕布是一个以层级折叠来整理内容的App,非常适合需要整理和展示想法或者记忆知识框架的人群。它的界面非常简洁,常见的笔记功能基本都有,关键是换层级的操作很简单。你可以先把知识要点全部罗列,然后按照你自己的思维方式,对要点进行整理排序,最后一键生成思维导图。

它支持PC端和手机端的同步,所以你可以同时在手机和电脑上进行编辑记录。无论是记笔记还是做计划,高效的逻辑方式和清晰的结构都会让你的工作效率翻倍~

艺术修养

每日故宫

中国上下五千年的历史遗留下的文物数不胜数,能在博物院看到的展出文物只是其中极为微小的部分,所以故宫博物院推出了一款在线展示文物的app,每日故宫。

西西表示,当官方爸爸开始发力做文创产品,真的就没有其他app什么事了......

打开应用就是一股扑面而来的文化气息,金色的logo和书法字体闪闪发光,日历界面简洁又大气。每日故宫每天会甄选一款馆藏珍品,点开日期后的展品图片可以放大缩小,细节处也可以看得很清楚。要是喜欢这件藏品你可以分享或者下载,它会自己生成一张带日期、名称、图片的藏品卡片。

有些展品会有展出的时间地点、背景作者的信息介绍,不用自己查资料就可以进行粗浅的了解。如果有个人看法和鉴赏评语,你可以点右下侧的毛笔图案,用上故宫的特色表情,写些随笔记录~

除了每日展品,app里的专题版块也很有用,一般是某次展览的展品合集,这样你可以看更多自己感兴趣的展品。宋元山水,城墙别苑,每天用欣赏一件藏品的时间去感受传世珍品的魅力,时间一长,你的审美能力和文化知识储备也会增长不少~

VART

如果你周末有一些还算悠闲的时间,想出门看个展,那你一定会用到Vart。

Vart每天都会更新全球合作场馆的展览信息,你既可以时实了解最新的艺术资讯和动向,也可以随时决定去哪个展。

主页面上的展览是根据你的城市定位显示的,展览的时间、地点和评分也是一目了然,有特别感兴趣的可以直接在app上购票,有时会有票务优惠哦~

摄影课程

不知道有没有喜欢静物摄影的朋友,西西个人是很喜欢的,尤其是食物摄影。虽然这些图片看上去很摆拍很造作,但既然能把生活过得好吃又好看,为什么不呢?

From tata_cher 食物摄影师

这里西西想给大家推荐一个讲静物摄影的老师——小艾老师,亲测讲课很细致,通俗易懂,新手入门都完全没有问题~

目前小艾老师的静物摄影课已经开到了第11期,西西是第9期的小学渣。当时老师是从相机构造、基本操作和参数设置讲到了道具布景、色彩理论,最后讲到修图软件的使用,中间涵盖了关于静物摄影我能想到的所有问题,诸如曝光补偿、构图、布光、闪光灯的使用等等。

实拍

讲课是在CCtalk平台上在线授课,错过直播时间可以看回放,老师也会拉微信群,群里也有助教小姐姐,有什么问题直接问就可以。而且每天都会布置作业、交作业,毕竟摄影最重要的还是多拍多上手,拍得多了也会形成自己的风格~

实拍

具体课程情况大家微信搜iSalt+就行,公众号里除了收费课程,还会定期推出一些免费公开课和讲座,摄影类型也不局限于静物美食,还有人文旅行摄影、手机摄影、平面设计之类的课,感兴趣的小伙伴可以了解一下~

时间管理

番茄To do

番茄钟是比较经典的时间管理法,一般是把任务分解成半小时,集中精力工作25分钟后休息5分钟,这样就算种了一个“番茄”。试过很多番茄钟的app,西西还是觉得番茄To Do是最顺手的。

西西最喜欢的就是它非常个性化的番茄钟设定。一共有三种类型的番茄钟,普通类型的就是计时番茄钟,分正计时、倒计时和不计时,计时时长也根据你自己的情况确定。

西西个人觉得25分钟的学习时间有些短了,可能刚刚专注没几分钟,又开始休息了。嫌不够严格你还可以开启学霸模式,任务完不成不能退出不能停止!

另外还有定目标和养习惯两种,比如你可以定一个“跑步3000分钟”的目标,完成次数没有限制,或者定一个“每天做一种小运动”的习惯,每天记得打卡划掉就行。这个app里还有统计数据的功能,你可以很清晰地看到当日时间、月度和年度时间的分布,以及你完成的目标次数,时间一长就会有满满的成就感啦~

西西喜欢它还有另外一个原因,就是界面很好看很舒服,配的文字和壁纸都超戳人!任务完成期间还可以选择背景音频,喜欢伴着白噪音、雨声、鸟鸣、雷声看书的小伙伴,就不用专门再下一个音频软件了~

Sleep Town

Forest可能很多人都用过了,票圈里也常常有人晒出自己种下的一片花花绿绿的森林,但Forest团队其实还推出了一款新作 SleepTown,目标是帮你养成早睡早起的规律作息,防止你在该休息的时候玩手机。

和Forest的模式类似,在设定好睡眠时间后,你的手机只能保持在盖房子的界面,在起床时间或之前的2小时内,你必须点下起床按钮,然后用力摇动手机,一旦进度条被摇满,你就会得到一座盖好的房子。

Sleep Town的房子有好几十种,从小木屋到大别墅,颜值设计都相当高,但如果你睡眠失败,你的房子就会塌掉......要多难受就有多难受。你睡眠作息越规律,你的房产就越多,当然你要是手机盖着房子去玩pad,西西就不建议你使用这一类app了~

Chronodex时间饼

给大家推荐一个小工具Chronodex,它是由Patrick Ng发明的时间管理体系。

Chronodex的实用性很强,个性化程度也比较高,可以搭配各种类型的笔记本,所以很多手账博主都有推荐过。虽然这个表看上去很复杂的样子,但是一旦你上手了就会知道,比起各种时间标、timeline,Chronodex有多方便快手。

Chronodex整体是12小时制的,像一个表盘一样,上面标有时间刻度,一个小格代表15分钟。最内的虚线圈是1am~9am,用虚线是因为大多数人是从9点开始工作学习的。第二圈起就是用实线绘制的,以三个小时为一组,形状从大到小进行区分。

ins:2silver_stargram

以ins上这位韩国学习博主的Chronodex为例:

中间写明今天的日期;扇形部分用不同颜色的笔标注不同事件的时长;关键时间点可以圈出来标明事件节点,比如任务deadline之类的。

ins:paperki

因为Chronodex是以15分钟为计量单位,所以时间规划可以做得很细致,而且你的时间是以饼状图呈现的,可以非常直观地展示你每天做了什么事,哪些事情耗时较长。

ins:prettygoodstuff.girl

另外Chronodex也并不麻烦,如果你特别注重效率,只需要用时间饼进行一个快速的时间规划,那你全部用黑色水笔涂写也没人会觉得不好。

每个人的时间饼都有自己的风格,你的Chronodex估计只有你自己能看懂,让它发挥最大的功效才是最重要哒~

ins:prettygoodstuff.girl

制作Chronodex目前有两种方法,一是使用油印印章,二是在网上下载图片打印出来。西西自己就是买的印章,某宝上有各种各样的Chronodex,选你看得顺眼的就好啦~

最后的最后,别忘了有调,这个应该是大家最熟悉的了。基本上我们每天都会购物,手机上也充满各种各样的购物App,但依然很难分得清商品好坏,很多东西不知道买什么样的好,不知道在哪买价格更合适。而我们有调就是为了帮你买到最好的东西,最合适的东西,帮你把在购物路上会遇到的坑踩平。

有调会做各种有趣科学的评测,目前已经做了近百种生活用品的评测,既有传遍朋友圈的口罩、防晒霜、雨伞评测;也有特别的套套评测、卫生巾评测;还有非常实用的电动牙刷评测、棉柔巾、耳塞等评测,总之涉及到生活的方方面面。去年还成立了有调吃喝团,做出了火爆朋友圈的方便火锅、螺蛳粉、香肠等评测。除了自己做评测,我们还做了大家来评测,让大家发表最真实的体验。

为测雨伞,我们联系了清华大学钱学森班共建风洞实验室为找到好吃的方便火锅,丧心病狂的试吃

除了花样、科学的评测,我们每天还有各种各样的干货文章,以及好用、好玩、有趣的好物。去年精品购也做的如火如荼,精品购的每件商品,都是我们亲身试用过的好东西。值得买频道也非常给力,可以看到各大购物网站实时的折扣信息,当然这些折扣都是经过层层筛选,每一件都是好东西,怕自己不能找到最优惠的折扣看值得买就对了。

其实还有很多比较常见的学习平台,比如知乎(虽然好像正在被娱乐花边新闻攻陷......),B站哔哩哔哩的纪录片也可以利用起来,还有一些诸如欧路词典、扇贝单词之类的语言类App。

总之资源很多,好好利用起来才有意义哦~

本文转载自互联网,如有侵权,联系删除