0

ああ、またか:

filterによく似た関数が欲しいのですが、値ではなく引数を返す必要があります。

data = numpy.array([0.0, 35., 2., 44., numpy.pi, numpy.sqrt(2.)])
args_pass_A = some_sort_of_f(lambda x: x<4., data)
print(args_pass_A)
[0, 2, 4, 5]
args_pass_B = some_sort_of_f(lambda x: x>=44., data)
print(args_pass_B)
[3]

scipy.stats と scipy.stats.mstats を検索しようとしましたが、最近mquantilesに向けられました(aganders3 に感謝します)。これはベルを鳴らしますか?また、numpy ドキュメントを検索しようとしましたが、うまくいきませんでした。

前もって感謝します。

4

3 に答える 3

2

この場合、where [docs]を使用します。

>>> import numpy
>>> data = numpy.array([0.0, 35., 2., 44., numpy.pi, numpy.sqrt(2.)])
>>> data
array([  0.        ,  35.        ,   2.        ,  44.        ,
         3.14159265,   1.41421356])
>>> numpy.where(data < 4)
(array([0, 2, 4, 5]),)
>>> numpy.where(data > 44.)
(array([], dtype=int64),)
>>> numpy.where(data >= 44.)
(array([3]),)

探しているのは、実際には返されたタプルの最初の要素であることに注意してください。

>>> numpy.where(data < 4)[0]
array([0, 2, 4, 5])

これらのインデックスを使用して、data再度インデックスを作成できます。

>>> data[numpy.where(data < 4)[0]]
array([ 0.        ,  2.        ,  3.14159265,  1.41421356])
于 2012-10-14T18:56:25.677 に答える
1

enumerateリスト ( ) を受け取り、ペアのリストを返す関数を使用できますorig_list。最初の要素は の項目のインデックスでorig_list、2 番目の要素は の項目orig_listです。

例:

orig_list = numpy.array([0.0, 35., 2., 44., numpy.pi, numpy.sqrt(2.)])
filter_func = lambda (idx, value): value<4.
filtered_pairs = filter(filter_func, enumerate(orig_list))
result = map(lambda (idx, value): idx, filtered_pairs)

itemgetterid エクストラクタを stdlib 関数(モジュール演算子)に置き換えることもできます。

from operator import itemgetter
orig_list = numpy.array([0.0, 35., 2., 44., numpy.pi, numpy.sqrt(2.)])
filter_func = lambda (idx, value): value<4.
result = map(itemgetter(0), filter(filter_func, enumerate(orig_list)))
于 2012-10-14T18:46:12.087 に答える
0
>>> def some_sort_of_f(data, condition = lambda x: x<4.):
        rez=[]
        for i in range(len(data)):
            if condition(data[i]):
                rez.append(i)
        return rez

>>> data = [0.0, 35., 2., 44.]
>>> some_sort_of_f(data)
[0, 2]
>>> 
于 2012-10-14T18:18:56.043 に答える