在for循环中追加列表数组

时间:2018-04-27 19:26:18

标签: python numpy append masked-array

我有一个蒙面数组Xpos:

masked_array(
  data=[[--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [--, --, --, --, --, --, --, --, --, --],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]],
 mask=[[ True,  True,  True, ...,  True,  True,  True],
    [ True,  True,  True, ...,  True,  True,  True],
    [ True,  True,  True, ...,  True,  True,  True],
    ...,
    [False, False, False, ..., False, False, False],
    [False, False, False, ..., False, False, False],
    [False, False, False, ..., False, False, False]],
fill_value=9.96921e+36,
dtype=float32)

当我问Xpos[3000,:]这是输出时:

[-3.802131175994873 -3.8107831478118896 -3.7940280437469482
 -3.838264226913452 -3.8027470111846924 -3.766021251678467
 -3.8610005378723145 -3.8038835525512695 -3.7840664386749268
 -3.7463834285736084]

所以一堆掩盖的值,一堆数字和一堆零。我想要一个没有屏蔽值且没有零的新数组,保持数组的相同结构。 我正在使用的代码是:

Xpos1=[]
for i in range (0,len(Xpos)):
    if Xpos[i,0]!=0: 
       Xpos1=np.append(Xpos1,Xpos[i,:] ) 

但是这给了我一个带有值的长数组,并且不保留原始结构,如Xpos[[a,b,c,],[a,b,c,],[a,b,c,]...]abc个数字。所以对于输出,我希望像Xpos1=[[a,b,c,],[a,b,c,],[a,b,c,]...]这样的abc个数字不是全为零。

如何改进编码以保持阵列列表(如果我使用错误的术语,请原谅我)?

3 个答案:

答案 0 :(得分:1)

作为列表文字,它可能如下所示:

lst1 = [y for y in [x for x in Xpos] if y[0] != "?" if y[0] != 0]
print(lst1)

给你:

[[1, 2, 3], [2, 3, 4]]

或者写出来的代码:

#!/usr/bin/env python

Xpos = [["?", "?", "?"],
        ["?", "?", "?"],
        [1, 2, 3],
        [2, 3, 4],
        [0, 0, 0],
        [0, 0, 0]]

mask = "?" # may replace mask with None.
XPos2 = []
for subarray in Xpos:
    for element in subarray:
        if element == mask or element == 0:
            break
        else:    
            XPos2.append(subarray)
            break

会给你:

[[1, 2, 3],[2, 3, 4]]

答案 1 :(得分:1)

我不是蒙面数组的专家,但这有效:

# create example
>>> a = np.arange(30).reshape(10, 3)
>>> a[[0,7,8]] = 0
>>> a = np.ma.MaskedArray(a, np.isin(a // 3, (2,3)))
>>> 
>>> a
masked_array(
  data=[[0, 0, 0],
        [3, 4, 5],
        [--, --, --],
        [--, --, --],
        [12, 13, 14],
        [15, 16, 17],
        [18, 19, 20],
        [0, 0, 0],
        [0, 0, 0],
        [27, 28, 29]],
  mask=[[False, False, False],
        [False, False, False],
        [ True,  True,  True],
        [ True,  True,  True],
        [False, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False]],
  fill_value=999999)
>>> 
# cut all rows that have at least one masked or all zero entries
>>> compressed = a.data[~np.any(a.mask, axis=1) & np.any(a.data!=0, axis=1)]
>>> compressed
array([[ 3,  4,  5],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [27, 28, 29]])

答案 2 :(得分:0)

尝试这样的事情:

SQL> with test (email) as
  2    (select 'abcd@gmail.com' from dual union
  3     select 'bdef@gmail.com abdfgr@yahoo.com' from dual
  4    )
  5  select ltrim(regexp_substr(email, '@(\w+\.\w+)', 1, column_value), '@') res
  6  from test,
  7       table(cast(multiset(select level from dual
  8                           connect by level <= regexp_count(email, '@' )
  9                          ) as sys.odcinumberlist));

RES
-----------------------------------------------------------------------------------

gmail.com
gmail.com
yahoo.com

SQL>

基本上你可以检查你不想要的值,然后只将你想要的列表附加到最终列表中。

相关问题