我有一个2d numpy数组,如果条件
我需要提取所有元素array[i][j]
x1range < i < x2range
和y1range < j < y2range
感到满意。
我如何写这样的条件?我需要使用mgrid / ogrid吗?
编辑:应该写下我的额外要求。我正在寻找where条件,而不是拼接,因为我想将所有元素的值更改为满足上述条件的(0,0,0)。我假设我有条件,我可以这样做。
Edit2:此外,是否可以获得上述条件的“不”?
如同,
if i > x1range and i < x2range and j > y1range and j < y2range: # the above condition
do nothing # keep original value
else:
val = (0,0,0)
答案 0 :(得分:0)
x=array[x1range:x2range,y1range:y2range]
答案 1 :(得分:0)
切片怎么样?
array[x1range:x2range,y1range:y2range]
示例:
numpy.array([[1,2,3],[4,5,6],[7,8,9]])[0:2,0:2]
array([[1, 2],
[4, 5]])
答案 2 :(得分:0)
问题#1:获取范围内的指数
您可以使用np.meshgrid
来获取这些索引 -
In [145]: x1range,x2range = 2,5
...: y1range,y2range = 1,4
...:
In [146]: np.meshgrid(np.arange(x1range,x2range),np.arange(y1range,y2range))
Out[146]:
[array([[2, 3, 4],
[2, 3, 4],
[2, 3, 4]]), array([[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])]
问题#2:在这些范围内提取或设置输入数组元素
您可以使用np.ix_
直接索引输入数组arr
-
In [148]: arr
Out[148]:
array([[97, 69, 0, 60, 28, 97],
[98, 85, 24, 75, 97, 23],
[70, 25, 77, 86, 93, 66],
[ 0, 85, 51, 17, 40, 92],
[66, 28, 28, 22, 79, 52]])
In [149]: arr[np.ix_(np.arange(x1range,x2range),np.arange(y1range,y2range))]
Out[149]:
array([[25, 77, 86],
[85, 51, 17],
[28, 28, 22]])
使用此索引,还可以直接设置所有这些元素。
问题#3:提取或设置不在这些范围内的输入数组元素
要将not
满意的元素设置/提取到0s
并保持相同,您可以像boolean-indexing
一样使用In [150]: Imask = np.in1d(np.arange(arr.shape[0]),np.arange(x1range,x2range))
...: Jmask = np.in1d(np.arange(arr.shape[1]),np.arange(y1range,y2range))
...: arr[~(Imask[:,None] & Jmask)] = 0
...:
In [151]: arr
Out[151]:
array([[ 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0],
[ 0, 25, 77, 86, 0, 0],
[ 0, 85, 51, 17, 0, 0],
[ 0, 28, 28, 22, 0, 0]])
-
- name: Blue green deploy to all production boxes.
hosts: [tag_Name_api_production, tag_Name_api_production_old]
tasks:
- include: blue.green.single.yml
vars:
- server_name: api
skip-tags:
- restart
- stop
- name: Blue green deploy to all production boxes.
hosts: [tag_Name_services_production, tag_Name_services_production_old]
tasks:
- include: blue.green.single.yml
vars:
- server_name: services
skip-tags:
- restart
- stop