矩阵数据

  • 一.元组,小括号

1.一维数组
In [4]: a
Out[4]: array([0, 1, 2, 3, 4])
In: a.shape
Out: (5,)
正如你所看到的,这是一个包含5个元素的向量,取值分别为0~4的整数。数组的shape属性
返回一个元组(tuple),元组中的元素即为NumPy数组每一个维度上的大小。上面例子中的数组
是一维的,因此元组中只有一个元素。

In: m = array([arange(2), arange(2)])
In: m
Out:
array([[0, 1],
[0, 1]])
In: m.shape
Out: (2, 2)
2.一维数组的索引和切片
一维数组的切片操作与Python列表的切片操作很相似。例如,我们可以用下标3~7来选取元
素3~6:
In: a = arange(9)
In: a[3:7]
Out: array([3, 4, 5, 6])
也可以用下标0~7,以2为步长选取元素:
In: a[:7:2]
Out: array([0, 2, 4, 6])
和Python中一样,我们也可以利用负数下标翻转数组:
In: a[::-1]
Out: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

  • 二 多维数组
    多维数组的切片和索引
    ndarray支持在多维数组上的切片操作。为了方便起见,我们可以用一个省略号(…)来
    表示遍历剩下的维度。
    (1) 举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组:
    In: b = arange(24).reshape(2,3,4)
    In: b.shape
    Out: (2, 3, 4)
    In: b
    Out:
    array([[[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9,10,11]],
    [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])
    多维数组b中有0~23的整数,共24个元素,是一个2×3×4的三维数组。我们可以形象地把它
    看做一个两层楼建筑,每层楼有12个房间,并排列成3行4列。或者,我们也可以将其看成是电子
    表格中工作表(sheet)、行和列的关系。你可能已经猜到, reshape函数的作用是改变数组的“形
    状”,也就是改变数组的维度,其参数为一个正整数元组,分别指定数组在每个维度上的大小。
    如果指定的维度和数组的元素数目不相吻合,函数将抛出异常

我们可以用三维坐标来选定任意一个房间,即楼层、行号和列号。例如,选定第1层楼、
第1行、第1列的房间(也可以说是第0层楼、第0行、第0列,这只是习惯问题),可以这样表示:
In: b[0,0,0]
Out: 0
(3) 如果我们不关心楼层,也就是说要选取所有楼层的第1行、第1列的房间,那么可以将第1
个下标用英文标点的冒号:来代替:
In: b[:,0,0]
Out: array([ 0, 12])
This selects the first floor
In: b[0]
Out:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9,10,11]])
我们还可以这样写,选取第1层楼的所有房间:
In: b[0, :, :]
Out:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9,10,11]])

进而可以选取第1层楼、第2排的所有房间:
In: b[0,1]
Out: array([4, 5, 6, 7])
(4) 再进一步,我们可以在上面的数组切片中间隔地选定元素:
In: b[0,1,::2]
Out: array([4, 6])
(5) 如果要选取所有楼层的位于第2列的房间,即不指定楼层和行号,用如下代码即可:
In: b[…,1]
Out:
array([[ 1, 5, 9],
[13,17,21]])
类似地,我们可以选取所有位于第2行的房间,而不指定楼层和列号:
In: b[:,1]
Out:
array([[ 4, 5, 6, 7],
[16,17,18,19]])
如果要选取第1层楼的所有位于第2列的房间,在对应的两个维度上指定即可:
In: b[0,:,1]
Out: array([1, 5, 9])
(6) 如果要选取第1层楼的最后一列的所有房间,使用如下代码:
In: b[0,:,-1]
Out: array([ 3, 7, 11])
如果要反向选取第1层楼的最后一列的所有房间,使用如下代码:
In: b[0,::-1, -1]
Out: array([11, 7, 3])
在该数组切片中间隔地选定元素:
In: b[0,::2,-1]
Out: array([ 3, 11])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值