创建数组
通过-1我们初步了解了数组,有个大概的了解,数组的出身,就源于其创建方法。
(1)创建数组的基本方法
np.array()是创建数组的基本方法,我们之前只是简单的应用,没有窥其全貌,偷瞄它的文档。
由此可见,我们对a,b两个变量都进行赋值,但是方法不同。
通过例子,我们可以知道,b在赋值的时候说明了为float类型。
在python的列表中,我们了解到嵌套列表,即列表中还是列表。在创建数组的时候,如果我们传入的是嵌套列表,就会得到一个多维数组。
这时候我们需要注意的是,我们传入的列表的各个元素的长度必须一样。同时,因为数组的元素类型必须一致,因此列表中的元素的类型也是一样的。如果刚才列表其中有一个元素的类型为float类型,那么整个列表的元素将变为float类型。如果元素的类型参差不齐,不会报错,但是类型可能与我们想到的类型不一样。
我们再来看一个例子
会发现,尽管也是创建了数组,但是从信息中看出,与刚才的结果明显不太一样,上一个例子才是我们所希望的二维数组。
我们可见,a是一维数组,da是二维数组,以上的操作分别显示了两个数组的属性。
da.shape的返回值是一个元组(3,4)表示,da在0轴上的元素个数为3,1轴上的元素个数为4.
同理,因为a为一维元组,在0轴上的元素个数为4。
da.ndim表示da为二维数组。
当然,并不是只写一行就为一维数组。
我们之前都是用列表作为np.array的引用对象,而在其文档中我们可以知道,object参数所引用的对象是array_like。
array_like为类数组,可以是列表,元组等可迭代序列,也可以是数组,矩阵。
我们可以看到,在array函数里,我们使用了a这个数组,然后将其类型标位complex类型,然后我们发现de的类型为复数类型。
array创建数组是基本的一个方法,还有不同的方式。
我们可以用函数创建数组
我们首先假设要创建一个数组,他有一百个整数,并且这100个整数具有某种规律,如果还用前面的方法,我们就GG了。
所以我们就有了一些函数来解决这些事情。
我们发现zeros函数能够创建了一个二维数组,宽2长10的元素全部为0的数组。其中(2,10)为数组形状。
在numpy中有许多创建特殊数组的函数:
asarray:输入参数为列表,元组,或者由他们组成的镶嵌对象,返回一个数组。如果参数是数组,就返回数组本身。
arange:根据开始值,结束值和步长创建一个数组。
ones,ones_like:根据指定的形状和元素类型,创建元素值为1的数组。ones_like创建一个域某指定数组完全一样但是元素值都为1的数组。zeros,zeros_like,empty,empty_like与此一样,但是元素为0或空。
eye,identity:创建对角线元素为1,其余元素为0的二维数组。
diag:创建对角线为指定元素,其余为0的二维数组。
实际上,我们能利用这些函数,得到其他的数组。
像6.4这样的数,我们称之为标量,后面的数组我们称为矢量。
当然,还有其他的方法:
我们试着使用eye函数:
可以看到,我们能通过改变关键值来调整对角线的位置。
相似的identity创建的是一个不能调整对角线的单位矩阵。
以此同时,diag的方法跟更加灵活一些些。
同样,diag也能设置k'的值来调整对角线数值。
diag非常的灵活,它还有其他的作用:
显而易见,非常有意思的作用。
我们再来讨论一下元素是等差和等比的数组:
np.arange()函数创建的数组,数组的元素符合等差数列。
我们发现,diag包前不包后。
函数linspace也可以得到由等差数列组成的数组,但是有很大的不同。
我们规定该等差数列的开始值为1,结束值为10,。但是很大不同的是,不同于包前不包后,这里的结束值也包含在数列之中。
而最后的4,不是步长值,而是这个数列总共应该有的数值个数,或者说数列的长度。