假设现在有一个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.]]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)