3

Python を使用して天文画像処理を行っていますが、numpy.std(a) が大量のメモリを消費しています。Luis Pedro による ncreduce パッケージを検索すると見つかりますが、ここでパッケージ フォームのダウンロードをビルドするのに苦労しています。ActiveStateは、このパッケージが Windows でビルドされないことを示唆しているようです。Windows 7 と Python 2.7 を使用しています。

Windows で ncreduce を使用できますか? そうでない場合、numpy.std(a) ほどメモリを消費しない、標準偏差または分散を計算するための代替高速アルゴリズムはありますか?

4

1 に答える 1

3

パッケージを msvc でビルドするには、いくつかの小さな変更が必要です。かなり古いものであり、テストはありませんので、自己責任で使用してください。

--- ncreduce/reduce.cpp Thu Aug 14 13:02:50 2008
+++ ncreduce/reduce.cpp Thu Sep 26 11:56:04 2013
@@ -6,6 +6,7 @@
 #include <iterator>
 #include <vector>
 #include <cmath>
+#include <limits>
 extern "C" {
     #include <Python.h>
     #include <numpy/ndarrayobject.h>
@@ -98,7 +99,7 @@
         }
         *result /= N;
         if (extra.is_std) {
-            *result = std::sqrt(*result);
+            *result = std::sqrt((double)(*result));
         }
     }

@@ -142,7 +143,7 @@
         for (unsigned i = 0; i != result.diameter(); ++i) {
             first_result[i] = divide(first_result[i],ArrSize/result.diameter());
             if (extra.is_std) {
-                first_result[i] = sqrt(first_result[i]);
+                first_result[i] = sqrt((double)first_result[i]);
             }
         }

--- setup.py    Thu Aug 14 13:54:48 2008
+++ setup.py    Thu Sep 26 12:03:16 2013
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 from numpy.distutils.core import setup, Extension

-ncreduce = Extension('ncreduce', sources = ['ncreduce/reduce.cpp', 'ncreduce/numpy_utils.hpp'], extra_compile_args=['-Wno-sign-compare'])
+ncreduce = Extension('ncreduce', sources = ['ncreduce/reduce.cpp', 'ncreduce/numpy_utils.hpp'], extra_compile_args=['/EHsc'])

 classifiers = [
     'Development Status :: 4 - Beta',

バイナリをhttp://www.lfd.uci.edu/~gohlke/pythonlibs/に置きました。ncreduce を検索します。

于 2013-09-26T19:10:12.337 に答える