在NumPy中操作数组元素

时间:2014-08-27 11:51:08

标签: python arrays numpy

我有一个给定的数组'a'如下:

import numpy as np

a = np.arange(-100.0, 110.0, 20.0, dtype=float) #increase 20
a = np.tile(a, 4)
a = a.reshape(4,11)

[[-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
 [-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
 [-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
 [-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]]

从数组'a',我需要创建一个新的数组'b',如下所示:

[[ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]
 [ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]
 [ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]
 [ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]]

实际上,数组'b'是:

b =  np.arange(100.0, -110.0, -20.0, dtype=float)
b = np.tile(b, 4)
b = b.reshape(4,11)

然而,在我的实际问题中,实际数据不是固定的,只有a,a [0,0]的索引是固定的。因此,我必须通过使用索引重新整形/重新排列其元素,从数组'a'生成数组'b'。

我尝试了如下,但无法想象如何得到正确答案:

b = np.flipud(a)
print b

[[-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
 [-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
 [-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]
 [-100.  -80.  -60.  -40.  -20.    0.   20.   40.   60.   80.  100.]]

b = np.rot90(a,1)
print b

[[ 100.  100.  100.  100.]
 [  80.   80.   80.   80.]
 [  60.   60.   60.   60.]
 [  40.   40.   40.   40.]
 [  20.   20.   20.   20.]
 [   0.    0.    0.    0.]
 [ -20.  -20.  -20.  -20.]
 [ -40.  -40.  -40.  -40.]
 [ -60.  -60.  -60.  -60.]
 [ -80.  -80.  -80.  -80.]
 [-100. -100. -100. -100.]]

什么numpy函数适合这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用np.fliplr

b = np.fliplr(a)
print b

[[ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]
 [ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]
 [ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]
 [ 100.   80.   60.   40.   20.    0.  -20.  -40.  -60.  -80. -100.]]

此功能以左/右方向翻转阵列。

该文档还建议了以下等效切片操作:

a[:,::-1]