Arrays Python—在一个redondant值数组中进行连接

Arrays Python—在一个redondant值数组中进行连接,arrays,numpy,Arrays,Numpy,我想“串联”检测到 我的数组“Coord3”中特定值的位置 对于数组的2个特定维度,我有一个双重标准。 我得到一些重要的位置,我想收集它,以便应用一个面具 这个价值观的一部分 以中等数组为例: import numpy as np Coord3 = np.array([[[[ 0., 0.], [ 0., 1.], [ 0., 2.]], [[ 1., 0.], [ 1., 1.], [ 1., 2.]

我想“串联”检测到 我的数组“Coord3”中特定值的位置

对于数组的2个特定维度,我有一个双重标准。 我得到一些重要的位置,我想收集它,以便应用一个面具 这个价值观的一部分

以中等数组为例:

import numpy as np

Coord3 = np.array([[[[ 0.,  0.],
        [ 0.,  1.],
        [ 0.,  2.]],

       [[ 1.,  0.],
        [ 1.,  1.],
        [ 1.,  2.]],

       [[ 2.,  0.],
        [ 2.,  1.],
        [ 2.,  2.]]],


        [[[ 1.,  0.],
        [ 1.,  1.],
        [ 1.,  2.]],

       [[ 2.,  0.],
        [ 2.,  1.],
        [ 2.,  2.]],

       [[ 4.,  0.],
        [ 3.,  1.],
        [ 4.,  2.]]],


        [[[ 2.,  0.],
        [ 2.,  1.],
        [ 2.,  2.]],

       [[ 3.,  0.],
        [ 3.,  1.],
        [ 3.,  2.]],

       [[ 4.,  0.],
        [ 4.,  1.],
        [ 4.,  4.]]]])


#I apply my double criteria in 2 shapes of my array Coord3

plaY=[]

for i in range(Coord3.shape[0]):
    holding_list = zip(*np.where(Coord3[i,:,:,0] > 3))
    plaY.append(holding_list)

plaY_array = np.asarray(plaY)

#plaY_array
#Out[1088]: array([[], [(2, 0), (2, 2)], [(2, 0), (2, 1), (2, 2)]], dtype=object)



plaX=[]

for i in range(Coord3.shape[0]):
    holding_list = zip(*np.where(Coord3[i,:,:,1] > 2))
    plaX.append(holding_list)

plaX_array = np.asarray(plaX)


#plaX_array
#Out[1097]: array([[], [], [(2, 2)]], dtype=object)
所以(2,0)和(2,2)是非常重要的,我想压制它,并将它们聚集在一个独特的数组中。。。作为:

np.数组([[2,0],[2,2],…)

---以后编辑------------------------------------------

我可以为每个特定的时间连接

plaY_array = plaY_array[:,np.newaxis]

plaX_array = plaX_array[:,np.newaxis]


test = plaX_array + plaY_array

#I get that :

#test
#array([[[[]]],

       #[[[(2, 0), (2, 2)]]],

       #[[[(2, 0), (2, 1), (2, 2), (2, 2)]]]], dtype=object)

因此,现在我必须仅抑制“第三个切片”中的(2,2)redundant,了解每个特定时间的坐标可能会很有趣(因此我让“第二个切片”中的(2,2)可以将坐标列表转换为一个集合,以删除重复项:

In [21]: set(zip(*(np.where(Coord3[:,:,:,0] > 3)[1:])))
Out[21]: {(2, 0), (2, 1), (2, 2)}


还请注意,您可以消除
for循环

for i in range(Coord3.shape[0]):
通过调用
np.where(Coord3[:,:,:,0]>3)
而不是
np.where(Coord3[i,:,:,0]>3)
对于每个
i

In [16]: np.where(Coord3[:,:,:,0] > 3)
Out[16]: (array([1, 1, 2, 2, 2]), array([2, 2, 2, 2, 2]), array([0, 2, 0, 1, 2]))

<代码> i>代码>值在第一个数组中,但是因为你不关心这些,所以你可以删除第一个数组。

谢谢你的回答!!)正如我刚才所说的,考虑不同的帧可能是有趣的。我考虑3次,我将结果作为一个形状数组(3,2),3次,2个位置。很抱歉带来更晚的条件…我的困难是由于“测试阵列”(3,1,1)的特殊形状。我不知道如何分别访问坐标…我很困惑。额外的条件是什么?期望的最终结果是什么?对不起,我不清楚!:正如您在编辑的第二部分中所看到的,我得到了一个“测试数组”,它表示满足2个条件>3和>2的两个坐标,但是在这个数组中,我在第三行(2,2)中得到了:[[(2,0),(2,1),(2,2),(2,2)]],dtype=object是redundant我想抑制它,我想在形状为(3,2)的数组中重塑结果,以便轻松访问我的结果(因为使用形状(3,1,1),我无法访问值)。但是对于这一部分,我应该问另一个问题。。。
In [16]: np.where(Coord3[:,:,:,0] > 3)
Out[16]: (array([1, 1, 2, 2, 2]), array([2, 2, 2, 2, 2]), array([0, 2, 0, 1, 2]))