5

4列で多くの行がある2Dnumpy配列があります(> 10000、この数は固定されていません)。

列の1つの値によってn個のサブ配列を作成する必要があります。私が見つけた最も近い質問は、列の値でNumpy配列をどのようにスライスするかでした。それでも、フィールドの正確な値はわかりません(floatであり、必要なすべてのファイルで変更されます)が、20以下であることはわかっています。

行ごとに読み取り、さまざまな値を記録してから分割することもできると思いますが、これを行うにはもっと効率的な方法があると思います。

ありがとうございました。

4

2 に答える 2

6

多次元スライスを便利に使用できます。

import numpy as np

# just creating a random 2d array.
a = (np.random.random((10, 5)) * 100).astype(int)
print a
print

# select by the values of the 3rd column, selecting out more than 50.
b = a[a[:, 2] > 50]

# showing the rows for which the 3rd column value is > 50.
print b

コメントで求めている内容に近い別の例 (?):

import numpy as np

# just creating a random 2d array.
a = np.random.random((10000, 5)) * 100
print a
print

# select by the values of the 3rd column, selecting out more than 50.
b = a[a[:, 2] > 50.0]
b = b[b[:, 2] <= 50.2]

# showing the rows for which the 3rd column value is > 50.
print b

これにより、3 列目の値が (50, 50.2] である行が選択されます。

于 2012-09-06T02:23:44.937 に答える
0

そのタスクには pandas を使用でき、具体的には DataFrame のgroupbyメソッドを使用できます。コード例を次に示します。

import numpy as np
import pandas as pd

# generate a random 20x5 DataFrame
x=np.random.randint(0,10,100)
x.shape=(20,5)
df=pd.DataFrame(x)

# group by the values in the 1st column
g=df.groupby(0)

# make a dict with the numbers from the 1st column as keys and
# the slice of the DataFrame corresponding to each number as
# values of the dict
d={k:v for (k,v) in g}

出力例:

In [74]: d[3]
Out[74]: 
    0  1  2  3  4
2   3  2  5  4  3
5   3  9  4  3  2
12  3  3  9  6  2
16  3  2  1  6  5
17  3  5  3  1  8
于 2012-09-06T05:17:26.017 に答える