Как я могу указать Eclipse .classpath запись для определенной платформы O/S?

Сила numpy / scipy / pandas заключается в использовании кода C для выполнения большей части работы за вас. Учитывая, что, по вашим словам, есть 300 тыс. Строк и 80 столбцов, я предлагаю вам сначала приложить все усилия, чтобы убедиться, что вы обрабатываете строки в C, а не в python. Таким образом, ваш первый цикл должен быть исключен: не обрабатывайте 300k элементов, используя python.

Как я читаю ваши требования, у вас есть индекс (метки строк), в котором есть значения какого-то типа, которые могут отображаться в отдельных ячейках в других ваших столбцах. Примерно так:

Index   A  B  C  D
  1     0  0  3  0
  2     2  0  1  -1
  3     0  0  0  0
  192   0  0  1  -1

Вы хотите знать, для каждого индекса, есть ли это значение в каком-либо из столбца A, столбца B, столбца C и т. Д. Если любое значение индекса появляется в столбце, этот столбец "ALIVE".

В конце процесса столбцы либо ALIVE, либо нет, и затем вы хотите отфильтровать другой словарь, чтобы исключить столбцы, которые не являются ALIVE.

В моем примере выше столбец A считается живым из-за {2}, а столбец C считается живым из-за {3, 1}, но столбцы B и D не являются живыми, потому что они не содержат никаких значений, которые присутствуют в указателе. Это правильно?

Попробуйте использовать isin, чтобы определить, присутствуют ли значения в столбцах в индексе. Затем используйте any, чтобы свести логические результаты к одному логическому значению, которое определяет, является ли столбец живым:

row_labels = df.index
col_is_alive = df.isin(row_labels).any()  # NB: any(index=0) is default

(ПРИМЕЧАНИЕ: я не в том месте, где я могу запустить этот код. Это может содержат синтаксис или другие ошибки.)

Теперь у вас есть серия из 80 логических значений, сообщающих, какие столбцы живы. Вы можете делать свою обработку так, как вам нравится.

alive_col_names = { name for name in df.columns if col_is_alive[name] }  # Set comprehension

Тем не менее, ваше первоначальное постановка проблемы звучит так, как будто вы делаете это один раз (в отличие от итеративного обновления групп имен столбцов). В этом случае, вместо того, чтобы пересекать значения словаря (списки каждого имени столбца, кроме ключа), я бы предложил просто вычислить значения напрямую. То есть вычислять пары ключ-> значение напрямую, а не пытаться «пересекать» списки значений с этим списком всех имен столбцов.

col_dict = { key:alive_col_names - {key} for key in alive_col_names}

С другой стороны, если вы каким-то образом итеративно обновляете эти значения, я бы посоветовал вам сделать вашу вторую структуру данных словарём строки -> set вместо string -> list, так как это даст вам доступ стандартным операциям над множеством и поведению.

new_col_dict = {}

for key, other_cols in col_dict.items():
    if key not in alive_col_names:
        continue

    new_col_dict[key] = other_cols.interset(alive_col_names)

col_dict = new_col_dict

(Которые могут быть свернуты с использованием разборчивого понимания, но, возможно, не в интересах читабельности.)

7
задан seanhodges 30 January 2009 в 11:48
поделиться

4 ответа

Eclipse позволит Вам определить переменные пути к классу, таким образом, можно будет сохранить .classpath тем же, но каждый разработчик настроил бы ее Eclipse согласно платформе. Вы могли по крайней мере затем присвоить версию .classpath файлу. Необходимо будет изменить структуру каталогов того, где Вы храните свои банки SWT к чему-то, где имя банки не изменяется на платформу. Это меню может быть найдено в: "Окно-> Предпочтения-> Java-> Путь Сборки"

SWTJARDIRECTORY/
    WIN32/
        SWT.JAR
    CARBON/
        SWT.JAR
    GTK/
        SWT.JAR

Напр.

    SWT_PLATFORM="SWTJARDIRECTORY/GTK", set by developer in Eclipse

.classpath

    SWT_PLATFORM/SWT.JAR
9
ответ дан 7 December 2019 в 01:27
поделиться

У Вас должны быть эти библиотеки в отдельном, легко идентифицируемом проекте вместо помещенного в каждый проект.

Например, создайте проект, названный "00-swt-provider" (таким образом, он идет на вершину), и позвольте ему сослаться на один из "00-swt-provider-carbon", "00-swt-provider-win32" или "00-swt-provider-gtk".

Любой из них экспортирует соответствующие собственные библиотеки для данной платформы, и единственная ссылка находится в 00-swt-provider. Фактический проект только ссылается на этот meta проект.

Мы используем вариант этого внутренне - он работает хорошо на нас.

1
ответ дан 7 December 2019 в 01:27
поделиться

Как насчет того, чтобы просто настроить Ваши собственные экземпляры и для этого компонента Вашей среды Вы не сохраняете его в своем управлении исходным кодом?

Кроме того, Вы могли хранить файл пути к классу для каждой среды, возможно, в другом каталоге и в файле муравья т.е. файле build-setup-env.xml, у Вас могла просто быть одна цель для каждой среды, которая копирует корректный через. Что касается хранения копии этого в управлении исходным кодом, несомненно, необходимо было бы скопировать его назад, когда это обновляется.

0
ответ дан 7 December 2019 в 01:27
поделиться

SWT делает это не управление версиями .classpath файл, но версиями несколько разделяют .classpath_* файлы с операционной системой и оконной системой, добавленной, например, .classpath_win32_win32. Таким образом при проверке источников из репозитория, Вы, как ожидают, скопируете соответствующий файл пути к классу в .classpath и перекомпилируете Ваш проект.

0
ответ дан 7 December 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: