【问题标题】:Append list array in for loop在 for 循环中追加列表数组
【发布时间】:2018-10-08 16:38:31
【问题描述】:

我有一个掩码数组 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 不全为零的数字。

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

【问题讨论】:

  • 那么考虑到I want a new array with no masked values and no zeros, keeping the same structure of the array,预期的输出是什么?
  • 什么值用作掩码? “-”是无效的语法。
  • @什么是被屏蔽的空值。
  • @Jellyse 然后使用我的答案,而不是 mask = "?"它应该是 mask = None
  • 为什么您发布的值没有“,”?

标签: python numpy append masked-array


【解决方案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]]

【讨论】:

  • 我的原始数组要大得多,并且由于某种原因,当我使用此代码时,每七个数字都会被删除。所以那将是'[[a b c d e -- g],[a b c d e -- g],[a b c d e -- g],...]'。
  • @Jellyse 你能用更大的数据样本更新你的问题吗?
【解决方案2】:

试试这样的:

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

Xpos1 = []
for inner_list in Xpos:
    if 0 in inner_list or "" in inner_list:
        pass
    else:
        Xpos1.append(inner_list)

print Xpos1

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

【讨论】:

    【解决方案3】:

    我不是掩码数组方面的专家,但这很有效:

    # 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]])
    

    【讨论】:

    • 那么问题实际上缺少 numpy 标签?
    • @What masked_array 在我看来与 numpy 不同。
    猜你喜欢
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2018-03-10
    相关资源
    最近更新 更多