0

私は次の形式のリストのリストを持っています

a = [[1,...,255],[1,...,255],...,[1,...,255]]

つまり、固定長255の整数のリストを含む任意の長さのリストです(固定長リストの値は「実世界」からのデータであり、この例のように1から255までの整数ではありません)。

ここで、すべての内部リスト(長さ255)のすべての値をフィルターで除外し0、値がしきい値を超えている場合に設定します。

2つのforループを記述せずにこれを行うスマートな方法はありますか?

4

3 に答える 3

4

numpyこれを非常に簡単に行うために使用できます。

import numpy as np

a = [range(255) for _ in range(10)]
np_a = np.array(a)    
# set all values above 200 to 0
np_a[np_a > 200] = 0
# np_a now contains the data with all values above 200 changed to 0

# if you needed to convert the numpy array back to a python list
a = np_a.tolist()

動作していることを示す出力。

In [209]: np_a
Out[209]:
array([[  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       ...,
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254],
       [  0,   1,   2, ..., 252, 253, 254]])

In [210]: np_a[np_a > 252]  = 0

In [211]: np_a
Out[211]:
array([[  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       ...,
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0],
       [  0,   1,   2, ..., 252,   0,   0]])
于 2013-02-01T11:56:30.240 に答える
0

バリエーション1:1のみfor、例:

dst = []
for s in src:
    dst.append([x if x < 3 else 0 for x in s])

バリアント2:明示なしfor

filter = lambda lst: [x if x < 3 else 0 for x in lst]
dst = [filter(x) for x in src]
于 2013-02-01T11:57:51.993 に答える
0
# arbitarry length list of 255 length lists.    
l = [range(255)]*3 # 3 inner lists (as example)

# get filtered results:
f = [[k if k > 5 else 0 for k in j] for j in l] # filter at value 5 (as example)

# as a function:
def filter(lst, num):
    return [[k if k > num else 0 for k in j] for j in lst]

# as an iter over inner lists.
def filter(lst, num):
    for j in lst:
        yield [k if k > num else 0 for k in j]
于 2013-02-01T12:07:21.220 に答える