Я неравнодушен к использованию встроенного в pandas метода corr для кадров данных. Однако я пытаюсь вычислить корреляционную матрицу кадра данных с 45 000 столбцов. А затем повторите это 250 раз. Расчет давит на мою оперативку (16 ГБ, Mac Book Pro). Я собираю статистику по столбцам результирующей корреляционной матрицы. Поэтому мне нужна корреляция одного столбца с каждым другим столбцом, чтобы вычислить эту статистику. Мое решение — вычислить корреляцию подмножества столбцов с каждым другим столбцом, но мне нужен эффективный способ сделать это.
Учитывайте:
импортировать панд как pd импортировать numpy как np np.random.seed([3,1415]) df = pd.DataFrame(np.random.rand(6, 4), columns=list('ABCD')) дф

Я хочу вычислить корреляции только для ['A', 'B']
corrs = df.corr()[['A', 'B']] Коррс

Я закончу расчетом среднего значения или какой-нибудь другой статистики.
Я не могу использовать код, который использовал для создания примера, потому что при масштабировании у меня не хватает памяти для него. При выполнении расчета он должен использовать объем памяти, пропорциональный количеству столбцов, выбранных для расчета корреляций относительно всего остального.
Мне нужно наиболее эффективное решение в любом масштабе. У меня есть решение, но я ищу другие идеи, чтобы добиться лучшего результата. Любой предоставленный ответ, который возвращает правильный ответ, как показано в демонстрации, и удовлетворяет ограничению памяти, будет одобрен мной (и я также призываю голосовать за друг друга).
Ниже мой код:
def corr(df, k=0, l=10): d = df.values - df.values.mean(0) d_ = d[:, k:l] s = d.std(0, Keepdims=True) return pd.DataFrame(d.T.dot(d[:, k:l]) / s.T.dot(s[:, k:l]) / d.shape[0], df.columns, df.columns[k:l])