choose函数实现条件筛选
choose函数主要利用下标以及下标所在的位置对相关的数组进行筛选,看下面的示例:
In [129]: control
Out[129]:
array([[1, 0, 1],
[2, 1, 0],
[1, 2, 2]])
In [130]: choose(control, [10, 11, 12]) # control中,1对应11,0对弈10,2对应12
Out[130]:
array([[11, 10, 11],
[12, 11, 10],
[11, 12, 12]])
--------------------------------------------------------
In [131]: i0
Out[131]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [132]: i2
Out[132]:
array([[20, 21, 22],
[23, 24, 25],
[26, 27, 28]])
In [133]: choose(control, [i0, 10, i2]) # control中,第一个元素1对应10,第二个元素[0, 1]0对应i0中的[0, 1]1,以此类推。
Out[133]:
array([[10, 1, 10],
[23, 10, 5],
[10, 27, 28]])
------------------------------------------------------------
In [135]: a = array([[0, 1, 2], [10, 11, 12], [20, 21, 22]])
In [136]: a
Out[136]:
array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22]])
In [137]: a < 10
Out[137]:
array([[ True, True, True],
[False, False, False],
[False, False, False]], dtype=bool)
In [138]: choose(a < 10, [a, 10]) # True可以看成是1,对应10;False看成0,对应a中相同位置的元素。
Out[138]:
array([[10, 10, 10],
[10, 11, 12],
[20, 21, 22]])
------------------------------------------------------------
# 下面的例子将数组中所有小于10的值变成了10, 大于15的值变成了15.
In [139]: a
Out[139]:
array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22]])
In [140]: a < 10
Out[140]:
array([[ True, True, True],
[False, False, False],
[False, False, False]], dtype=bool)
In [141]: a > 15
Out[141]:
array([[False, False, False],
[False, False, False],
[ True, True, True]], dtype=bool)
In [142]: lt = a < 10
In [143]: a > 15
Out[143]:
array([[False, False, False],
[False, False, False],
[ True, True, True]], dtype=bool)
In [144]: gt = a > 15
In [145]: gt
Out[145]:
array([[False, False, False],
[False, False, False],
[ True, True, True]], dtype=bool)
In [146]: 2 * gt
Out[146]:
array([[0, 0, 0],
[0, 0, 0],
[2, 2, 2]])
In [147]: gt * 2
Out[147]:
array([[0, 0, 0],
[0, 0, 0],
[2, 2, 2]])
In [148]: a
Out[148]:
array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22]])
In [149]: lt = a < 10
In [150]: lt
Out[150]:
array([[ True, True, True],
[False, False, False],
[False, False, False]], dtype=bool)
In [151]: gt = a > 15
In [152]: gt
Out[152]:
array([[False, False, False],
[False, False, False],
[ True, True, True]], dtype=bool)
In [153]: choice = lt + 2 * gt
In [154]: choice
Out[154]:
array([[1, 1, 1],
[0, 0, 0],
[2, 2, 2]])
In [155]: choose(choice, [a, 10, 15])
Out[155]:
array([[10, 10, 10],
[10, 11, 12],
[15, 15, 15]])
transpose实现转置
np.transpose实现数组的转置,并且可以定制转置的维度。示例如下:
In [2]: a = np.arange(6).reshape(1, 2, 3)
In [3]: a
Out[3]:
array([[[0, 1, 2],
[3, 4, 5]]])
In [5]: np.transpose(a)
Out[5]:
array([[[0],
[3]],
[[1],
[4]],
[[2],
[5]]])
In [6]: np.transpose(a).shape
Out[6]: (3, 2, 1)
In [7]: np.transpose(a, axes=(1, 2, 0)) # 沿着指定维度的转置
Out[7]:
array([[[0],
[1],
[2]],
[[3],
[4],
[5]]])
In [8]: np.transpose(a, axes=(1, 2, 0)).shape
Out[8]: (2, 3, 1)
squeeze压缩数组维度
np.squeeze可以压缩数组的维度,去掉维度等于1的那一维。示例如下:
In [9]: a
Out[9]:
array([[[0, 1, 2],
[3, 4, 5]]])
In [10]: a.shape
Out[10]: (1, 2, 3)
In [12]: np.squeeze(a)
Out[12]:
array([[0, 1, 2],
[3, 4, 5]])
In [13]: np.squeeze(a).shape
Out[13]: (2, 3)
repeat复制数组元素
np.repeat实现数组元素的复制,并且可以定制维度,示例如下:
In [14]: w = np.array([[-1,-1,-1], [-1,8,-1], [-1,-1,-1]])
In [15]: w.shape
Out[15]: (3, 3)
In [16]: w = w.reshape(1, 1, 3, 3)
In [17]: w
Out[17]:
array([[[[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]]])
In [18]: w.shape
Out[18]: (1, 1, 3, 3)
In [19]: np.repeat(w, 3)
Out[19]:
array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 8, 8, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
In [21]: np.repeat(w, 3).shape
Out[21]: (27,)
In [22]: np.repeat(w, 3, axis=1) # 定制复制维度,沿着第一维进行复制
Out[22]:
array([[[[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]],
[[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]],
[[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]]])
In [23]: np.repeat(w, 3, axis=1).shape
Out[23]: (1, 3, 3, 3)