3

I'm removing some columns from a numpy array using a boolean array. Is it possible to do something similar with a list?

#Set a numpy array of booleans to True if column datatype is "Categorical"
cols_to_remove = np.array([datatype == "Categorical" for datatype in datatypes])

#Make a new array without the "Categorical" columns
cat_data = data[:, -cols_to_remove] # data here is a 2D numpy array

#Trying to do the same for a list - this way doesn't work
cat_datatypes = datatypes[-cols_to_remove] # datatypes here is a 1D list
4

1 に答える 1

4

これは、リスト内包表記で行うことができます。

In [17]: cols_to_remove = [False, False, True, False, True, False]

In [18]: [d for (d, remove) in zip(datatypes, cols_to_remove) if not remove]
Out[18]: ['a', 'b', 'd', 'f']

これcols_to_removeはインデックスの配列であり、次のソリューションを使用できます。

In [12]: datatypes = ['a', 'b', 'c', 'd', 'e', 'f']

In [13]: cols_to_remove = [2, 4]

In [14]: [d for (i, d) in enumerate(datatypes) if i not in cols_to_remove]
Out[14]: ['a', 'b', 'd', 'f']

ここでは、効率上の理由から、 にcols_to_remove変換することをお勧めしsetます。

于 2013-01-26T13:07:48.320 に答える