Поскольку мы не знаем, что именно делается с элементами, отличными от NaN, вот иллюстрация того, как они могут быть инвертированы:
dataframe[dataframe.notna()] = 1 / dataframe
Как вы можете видеть, в этом нет циклов. Если вам нужен более конкретный ответ, пожалуйста, задайте более конкретный вопрос.
Это не автоматически, но , doxygen произведет схемы зависимости для #included
файлы. Необходимо будет пройти их визуально, но они могут быть очень полезны для получения изображения того, что использует что.
Gimpel Software Линт пк может сообщить относительно того, когда включать файл был включен несколько раз в единице компиляции <забастовка>, но это не может найти, включают файлы, которые не нужны в способе, которым Вы ищете.
Редактирование: Это может. См. ответ itsmatt
Эта статья объясняет метод удаления #include при помощи парсинга Doxygen. Это - просто сценарий жемчуга, таким образом, это довольно просто в использовании.
Я попытался использовать Flexelint (версия Unix Линта ПК) и несколько смешал результаты. Это вероятно, потому что я работаю над очень большой и затруднительной кодовой базой. Я рекомендую тщательно исследовать каждый файл, о котором сообщают как неиспользованном.
основное беспокойство является ложными положительными сторонами. Несколько включают того же заголовка, сообщаются как ненужный заголовок. Это плохо, так как Flexelint не говорит Вам, в какую строку заголовок включен или где он был включен прежде.
Один из автоматизированных инструментов путей может понять это превратно:
В A.hpp:
class A {
// ...
};
В B.hpp:
#include "A.hpp
class B {
public:
A foo;
};
В C.cpp:
#include "C.hpp"
#include "B.hpp" // <-- Unneeded, but lint reports it as needed
#include "A.hpp" // <-- Needed, but lint reports it as unneeded
при слепом следовании сообщениям от Flexelint, Вы испачкаете свои #include зависимости. Существует больше патологических случаев, но в основном Вы испытываете необходимость для осмотра заголовков сами для лучших результатов.
я настоятельно рекомендую эту статью о Физическая Структура и C++ из блога Игры из. Они рекомендуют комплексный подход к чистке путаницы #include:
Инструкции
Here’s дистиллированный набор инструкций из книги Lakos’, которые минимизируют количество физических зависимостей между файлами. I’ve, с помощью них в течение многих лет и I’ve, всегда действительно довольный результатами.
- Каждый cpp файл включает свой собственный заголовочный файл сначала. [надрез]
- заголовочный файл А должен включать все заголовочные файлы, необходимые для парсинга его. [надрез]
- заголовочный файл А должен иметь количество абсолютного минимума заголовочных файлов, необходимых для парсинга его. [надрез]
Я никогда не находил законченный инструмент, который выполняет то, что Вы спрашиваете. Самая близкая вещь, которую я использовал, IncludeManager, который изображает Ваше дерево включения заголовка в виде графика, таким образом, можно визуально определить вещи как заголовки, включенные только в один файл и круговые включения заголовка.
Извините к (пере-) сообщение здесь, люди часто не разворачивают комментарии.
Проверка мой комментарий к crashmstr, FlexeLint / Линт ПК сделает это для Вас. Информационное сообщение 766. Разделите 11.8.1 из моего руководства (версия 8.0), обсуждает это.
кроме того, и это важно, продолжайте выполнять итерации, пока сообщение не уходит . Другими словами, после удаления неиспользованных заголовков, повторно выполняет линт, больше заголовочных файлов, возможно, стало "ненужным", как только Вы удаляете некоторые ненужные заголовки. (Который мог бы звучать глупым, медленно читать его & проанализируйте его, это имеет смысл.)
Можно записать быстрый сценарий, который стирает единственную #include директиву, компилирует проекты и регистрирует имя в #include и файле, из которого это было удалено в случае, что никакие ошибки компиляции не произошли.
Позволяют ему работать в течение ночи, и на следующий день у Вас будет 100%-й корректный список, включают файлы, которые можно удалить.
Иногда "в лоб" просто работает:-)
<час>редактирование: и иногда это не делает:-). Вот немного информации из комментариев:
браузер рефакторинга CScout может обнаружить лишний, включают директивы в C (к сожалению, не C++) код. Можно найти описание того, как оно работает в этот статья в журнале.
Я думал, что PCLint сделает это, но это были несколько лет, с тех пор как я посмотрел на него. Вы могли бы проверить его.
я посмотрел , этот блог и автор говорили немного о конфигурировании PCLint для нахождения неиспользованным, включает. Мог бы быть достойный внимания.
Проблема с обнаружением лишнего включает, то, что это не может быть просто средство проверки зависимости от типа. Лишнее включает, файл, который обеспечивает, ничто из значения к компиляции и не изменяет другой объект, который зависят другие файлы. Существует много способов, которыми заголовочный файл может изменить компиляцию, сказать путем определения константы, переопределения и/или удаления используемого макроса, добавления пространства имен, которое изменяет поиск имени некоторый путь по линии. Для обнаружения объектов как пространство имен, в котором Вы нуждаетесь намного больше, чем препроцессор, Вам на самом деле почти нужен полный компилятор.
Линт является большим количеством программы проверки стиля и конечно не будет иметь этой полной возможности.
я думаю, что Вы найдете, что единственный способ обнаружить лишнее включает, должен удалить, скомпилировать и выполнить комплекты.
cppclean Google (связывается с: загрузка , документация ), может найти несколько категорий проблем C++, и она может теперь найти лишний #includes.
существует также Основанный на лязге инструмент, include-what-you-use, который может сделать это. include-what-you-use может даже предложить предописания (таким образом, Вы не имеете к #include так), и дополнительно очистите свой #includes для Вас.
Текущие версии Eclipse CDT также встроили эту функциональность: движение в соответствии с меню Source и нажатие на Organize Includes расположат в алфавитном порядке Ваш #include, добавить любые заголовки, что Eclipse думает, что Вы используете без непосредственно включая их, и комментирует любые заголовки, что это не думает, что Вам нужно. Эта функция не на 100% надежна, как бы то ни было.
Возможно, немного поздно, но однажды я нашел Perl-скрипт WebKit, который делал именно то, что вы хотели. Думаю, потребуется некоторая адаптация (я плохо разбираюсь в perl), но она должна помочь:
(это старая ветка, потому что в магистрали больше нет файла)