??假设现在有一个array a ,我想要每隔一行取一行,然后将结果拼接起来,获得array b ,如下所示:
a =
[[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[ 5., 6., 7., 8., 9.],
[10., 11., 12., 13., 14.],
[10., 11., 12., 13., 14.],
[15., 16., 17., 18., 19.],
[15., 16., 17., 18., 19.],
[20., 21., 22., 23., 24.],
[20., 21., 22., 23., 24.]]
b =
[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]]
??那么,我们可以这么实现:
import numpy as np
b = a[0:a.shape[0]:2]
??上述代码的意思是,从第0行开始,到a.shape[0]行(在这里即为10(不含))为止,每隔两行取一行数据。当然,也有更省略的写法,如上注释所示。同理,如果要每隔两列取,则代码和结果如下:
c = a[:, 0:a.shape[1]:2]
[[ 0., 2., 4.],
[ 0., 2., 4.],
[ 5., 7., 9.],
[ 5., 7., 9.],
[10., 12., 14.],
[10., 12., 14.],
[15., 17., 19.],
[15., 17., 19.],
[20., 22., 24.],
[20., 22., 24.]]
??这是numpy一个很常用到的操作。但是现在,我想要进行逆操作,即我现在有了array b ,我想要获得array a ,该怎么办呢? ??这个操作就不是很常见了。但是我们可以借鉴隔行取数这个操作,来实现它的逆操作。代码如下:
d = np.zeros(2*b.shape[0], b.shape[1])
d[0:b.shape[0]:2] = b
d[1:b.shape[0]:2] = b
??很好理解,首先创建一个全零的array d ,然后先对d 的奇数行赋予b 的值,再对d 的偶数行赋予b 的值,结果如下(跟a 是一样的):
[[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[ 5., 6., 7., 8., 9.],
[10., 11., 12., 13., 14.],
[10., 11., 12., 13., 14.],
[15., 16., 17., 18., 19.],
[15., 16., 17., 18., 19.],
[20., 21., 22., 23., 24.],
[20., 21., 22., 23., 24.]]
|