A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 革革吉祥 于 2018-6-14 17:05 编辑

数组和标量之间的运算
        数组很重要,因为它使你不用编写循环即可对数据执行批量运算。这通常就叫做矢量化(vectorization)。大小相等的数组之间的任何算术运算都会将运算应用到元素级:

        同样,数组与标量的算术运算也会将那个标量值传播到各个元素:

        不同大小的数组之间的运算叫做广播(broadcasting)

基本的索引和切片
        NumPy数组的索引是一个内容丰富的主题,因为选取数据集成单个元素的方式有很多。一维数组很简单。从表面上看,他们跟Python列表的功能差不多:


        如上图所示,当你将一个标量值赋值给一个切片时(如arr[5:8] = 12),该值会自动传播到整个选区。跟列表最重要的区别在于,数组切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上:


        对于高维度数组,能做的事情更多。在一个二维数组中,各索引位置上的元素不再是标量而是一维数组:

        因此,可以对各个元素进行递归访问,但这样需要做的事情有点多。你可以传入一个以逗号隔开的索引列标来选区单个元素。也就是说,下面两种方式是等价的:

        在多维数组中,如果省略了后面的索引,则返回对象会是一个维度低一点的ndarray(它含有高一级维度上的所有数据)。因此,在223数组arr3d中:

        arr3d[0]是一个2 x 3数组:
        标量值和数组都可以被赋值给arr3d[0]:

        以此类推,arr3d[1, 0]可以访问索引以(1, 0)开头的那些值(以一维数组的形式返回):

        注意:在上面所有这些选取数组子集的例子中,返回的数组都是视图。

切片索引
        ndarray的切片语法跟Python列表这样的一维对象差不多:

        高维度的花样更多,你可以在一个或多个轴上进行切片,也可以跟整数索引混合使用。对于上面那个二维数组arr2d,其切片方式稍显不同:

        可以看出,它是沿着第0轴(即第一个轴)切片的。也就是说,切片是沿着一个轴向选取元素的。你可以一次传入多个切片,就像传入多个索引那样:

        像这样进行切片时,只能得到相同维数的数组视图。通过将整数索引和切片混合,可以得到低维度的切片:

        注意,“只有冒号” 表示选取整个轴,因此你可以像下面这样只对高维轴进行切片:




10.png (4.46 KB, 下载次数: 20)

10.png

12.png (10.87 KB, 下载次数: 13)

12.png

2 个回复

倒序浏览
baby14 来自手机 金牌黑马 2018-6-16 12:47:29
沙发
多谢分享
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马