упражнение в учебнике this говорит:нарезка Numpy массив
Сформировать массив 10 х 3 случайных чисел (в диапазоне
[0,1]
). Для каждой строки выберите номер, ближайший к0.5
.Используйте
abs
иargsort
, чтобы найти столбецj
, ближайший для каждой строки.Используйте причудливую индексацию для извлечения чисел. (Подсказка:.
a[i,j]
- массивi
должен содержать номера строк, соответствующий материал вj
)
Так что я сделал все, но я чувствую, что метод нарезания я использовал (и инициализация b
) не вещий на всего:
a = np.random.rand(10,3)
mask = np.argmin(abs(a-0.5), axis = 1)
b = np.ones(mask.size)
for j in range(0,mask.size):
b[j] = a[j,mask[j]]
Что другой способ сделать это без использования цикла for
?
Clever! Вместо этого я бы использовал 'b = a [диапазон (len (маска)), mask]' (что, по моему мнению, подсказывает намек), но это аккуратно. – DSM
Python никогда не перестает удивлять меня: D. Это для таких людей, как я, которые должны видеть другие примеры того, как работает 'select'. [Здесь] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.choose.html?highlight=choose#numpy.choose) – pythonista