我们之前学习了手动建立和利用特殊函数Numpy.zeros以及Numpy.ones来创建数组。这节课我们提供更多的方法,让大家可以创建自己想要的数组。
01从其他数据类型转换
我们在讲列表和Numpy数组很像的时候,告诉大家一种讲列表转换成Numpy数组的方法。其实Numpy里面有一个函数,叫asarray可以不仅可以将列表转换成Numpy数组 ,还可以将元组转换成Numpy数组。
我们建立了一个列表a和一个元组b,分别用np.array和np.asarray来转换.其实在将列表和元组转换成numpy数组的时候效果是一样的。也就是说不论是从列表a出发得到的a_1和a_2还是从元组b出发得到的b_1和b_2都是numpy数组[1,2,3]:
但是,他们二者还是有区别的,当数据源是ndarray,即numpy数组的时候,array会复制出一个副本,占用新的内存,但是asarray并不会。从这里看来,对一般的程序任务,我们并不太需要区分array和asarray,除非做大型数据的时候。
02数值范围创建之arrange
很多情况下我们非常想要得到从一个整数到另一个整数的一个数组,比如周一到周日,一天中从1点到24点等,还有从-10度到40度的温度范围。这时候用NumPy中的arange函数就可以帮助你达成这个目标。
arange函数有四个输入参数来调整:start,stop, step, dtype。不难看出来,分别是起始值,终止值,步长(默认是1),还有数据类型。值得注意的是,这里的终止值是取不到的,所以真正意义上而言终止值是(stop-1).
我们一共建立了四个数组,第一个我们只有一个参数,是终止值参数,这时候其他参数都是默认的。第二个数组,我们给定了起始值和终止值。第三个数组我们增加了步长。第四个数组,我们隐藏的其实是步长,也就是取默认值1。大家在看答案之前可以猜一下a,b,c,d分别是多少。
03数值范围创建之linspace
除了用arange函数创建一个数值范围数组,还有一个函数叫linspace也可以做到。linspace其实可以看成linear space的缩写,线性空间。如果大家觉得不好理解,就把它当成一个等差数列就可以。
和arange稍有不同的是,linspace的参数更多,而且没有步长,相反它有个叫做num的参数来控制生成数列的总数目。也就是说,在给定起始值和终止值的时候,步长被总数目决定了。
我们把linspace格式写出来 np.linspace(start, stop, num=50, endpoint = True, retstep = Flase, dtype = None)。你会发现有些地方有等于号,有些地方没有,有等于号的地方就是设定默认值。其中endpoint是调节终止值是否被包含在数组中,默认是包含的。retstep是一个是否显示生成数组间距的参数。
我们分别利用linspace建立了三个数组,第一个我们默认终止值是包含在内的,第二个我们去掉了终止值,最后我们显示数列的间距。
运行结果: