2015-03-03 2 views
11

Numpy v 1.9 содержит две, казалось бы, одинаковые функции: 'flatten' и 'ravel'В чем разница между flatten и ravel в numpy?

В чем разница? и когда я могу выбрать один против другого для преобразования двумерного np.array в 1-D?

+3

Если вы прочитали документы, с которыми вы связались, обратите внимание, что 'flatten' всегда будет *« Вернуть копию »*, тогда как' ravel' сделает копию * «только при необходимости» *. – jonrsharpe

+0

Я читал это в документах, но что подразумевается только при необходимости? В каких случаях это не нужно? Как NP знает, если это необходимо? Кроме того, при дальнейшем тестировании также кажется, что есть случаи, когда сглаживание не будет работать на массиве, но ravel будет. Все еще не знаю почему. Это тот тип информации, который я надеялся запросить. –

+1

Тогда, возможно, это то, что вы должны были спросить ... – jonrsharpe

ответ

14

Aha: Первичное функциональное различие в том, что flatten является метода из ndarray объекта и, следовательно, может быть вызван только для истинных Numpy массивов. Напротив, ravel() - это функция уровня библиотеки и, следовательно, может быть вызвана на любой объект, который может быть успешно проанализирован. Например, ravel() будет работать над списком ndarrays, а сгладить (очевидно) не будет.

Кроме того, как отметил в своем комментарии @jonrsharpe, метод flatten всегда возвращает копию, а ravel только делает это «при необходимости». Все еще не совсем показано, как это определение сделано.

+0

Даже если вы обращаетесь к вашему массиву через многомерный индекс, в памяти элементы по-прежнему адресуются линейно-последовательно (используя простой шаблон растрового сканирования для преобразования мультииндекса к линейному индексу). Я ожидал бы, что numpy вернет «представление», если вы попросите, чтобы элементы были в той же последовательности, что и они, уже хранятся в памяти (и только для возврата копии, если вы запросили упорядочение размеров, что требует последовательности элементов в - память будет перетасована). – benjimin

Смежные вопросы