2013年のご多幸をお祈りします!
私はSciPyのウィーブを私のC++コードとインラインで使用して、巨大なマトリックス(約200.000 x 15)を転置しています。それは魅力のように機能しますが、型キャストについて質問があります。
私の入力行列はファイルから読み取られ、コンマ区切りなどであるため、すべてのエントリはfloatではなく文字列です(0.551ではなく「0.551」)。これは転置関数の動作には影響しませんが、後で特定の行をnumpy float配列に変換する必要があるため、代わりにC++コードでこれを実行できるかどうか疑問に思いました。いくつかのコードで説明しましょう:
def transpose(lines, N, x):
code = """
py::list matrix;
for(int i = 0; i < x; i++) {
py::list line;
if(i == 1) { continue; }
for(int j = 0; j < N; j++) {
line.append(lines[j][i]);
}
matrix.append(line);
}
return_val = matrix;
"""
return weave.inline(code, ['lines', 'N', 'x'])
matrix = [['0.5','0.1'],['0.2','0.2']]
matrixT = transpose(matrix, len(matrix), len(matrix[0]))
final_result = np.array(matrixT[0], dtype=float)
この例では、私の小さな行列が転置され、私の例の結果は、転置された行列の最初の行がdtypefloatのnumpy配列に変換されます。代わりに、これをC ++コードで実行できますか?私はdouble x = (double) lines[j][i]
そのようなものを使ってみましたが、py::listオブジェクトに追加するためにどういうわけか機能しません。