Я бы порекомендовал что-то вроде этого:
from collections import OrderedDict
feature_set = np.array([[ 1., 1., 88., 42.5, 9., 88., 42.5, 13. ],
[ 1., 1., 121.5, 76., 42.5, 117.5, 72., 42.5],
[ 1., 1., 167., 121.5, 88., 163., 117.5, 88. ]])
feature_column_index = OrderedDict()
feature_column_index['feature1'] = 0
feature_column_index['feature2'] = 1
feature_column_index['feature3'] = 2
feature_column_index['feature4'] = 3
feature_column_index['feature5'] = 4
feature_column_index['feature6'] = 5
feature_column_index['feature7'] = 6
feature_column_index['feature8'] = 7
excluded_features = ['feature2', 'feature7']
include_columns = [kv[1] for kv in feature_column_index.items() if kv[0] not in excluded_features]
print(include_columns)
feature_subset = feature_set[:, include_columns]
print(feature_subset)
Что дает желаемое подмножество столбцов:
[0, 2, 3, 4, 5, 7]
[[ 1. 88. 42.5 9. 88. 13. ]
[ 1. 121.5 76. 42.5 117.5 42.5]
[ 1. 167. 121.5 88. 163. 88. ]]
Обратите внимание, что OrderedDict отсортирован в порядке вставки. Вы можете создать карту объектов в любом порядке, в котором вы хотите, но если вы не отсортируете ее в порядке индекса столбцов, вы в конечном итоге будете менять порядок столбцов в подмножестве объектов. Я создал его в порядке индекса, чтобы он поддерживал порядок столбцов в выходных данных.
Поскольку автор хотел бы обрабатывать их как группы объектов («a», «b», «c»), это можно сделать, поддерживая сопоставление столбцов в соответствии с этими подмножествами объектов как модификацию более Общее отображение выше:
from collections import OrderedDict
feature_set = np.array([[ 1., 1., 88., 42.5, 9., 88., 42.5, 13. ],
[ 1., 1., 121.5, 76., 42.5, 117.5, 72., 42.5],
[ 1., 1., 167., 121.5, 88., 163., 117.5, 88. ]])
feature_subset_mapping = OrderedDict()
feature_subset_mapping['a'] = [0,1]
feature_subset_mapping['b'] = [2,3,4]
feature_subset_mapping['c'] = [5,6,7]
excluded_subsets = ['b']
include_columns = []
for subset in [kv[1] for kv in feature_subset_mapping.items() if kv[0] not in excluded_subsets]:
include_columns = include_columns+subset
print(include_columns)
feature_subset = feature_set[:, include_columns]
print(feature_subset)
Что дает:
[0, 1, 5, 6, 7]
[[ 1. 1. 88. 42.5 13. ]
[ 1. 1. 117.5 72. 42.5]
[ 1. 1. 163. 117.5 88. ]]