假设现在有一个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] # 或 # b = a[::2]
上述代码的意思是,从第0行开始,到a.shape[0]行(在这里即为10(不含))为止,每隔两行取一行数据。当然,也有更省略的写法,如上注释所示。同理,如果要每隔两列取,则代码和结果如下:
c = a[:, 0:a.shape[1]:2] # 或 # c = a[:, ::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 # 或 # d[::2] = b # d[1::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.]]



