2017-07-19 6 views
0

バイナリファイルを作成しません:はnumpyのは

from io import open 
X = [random.randint(0, 2 ** self.stages - 1)for _ in range(num)] 
Matrix = np.asarray([list(map(int, list(x))) for x in X]) 

file_output = open('result.bin', 'wb') 
M = np.ndarray(Matrix, dtype=np.float64) 
file_output.write(M) 
file_output.close() 

私はこのエラーを取得する:

Traceback (most recent call last): 
    File "experiments.py", line 164, in <module> 
    write_data(X, y) 
    File "experiments.py", line 39, in write_data 
    arr = np.ndarray(Matrix, dtype=np.float64) 
ValueError: sequence too large; cannot be greater than 32 

私はこの問題を解決する方法を知っていることはできますか?あなたは2つの等価のいずれかの方法でこれを行うことができ、あなたに

+0

コードは、まずコード(ファイル名など)を修正します。 – patrick

+0

文字列を開くのを忘れた。最初に修正してください。 –

+0

ああ!ありがとうございました 。しかし同じ問題が残っています – Medo

答えて

1

ありがとう:

import numpy as np 

a = np.random.normal(size=(10,10)) 
a.tofile('test1.dat') 

with open('test2.dat', 'wb') as f: 
    f.write(a.tobytes()) 

# diff test1.dat test2.dat 

tofileのためのドキュメントを参照してください。しかし、元の例では、Matrixndarrayに変換されていないようです。

1

置き換えます

M = Matrix.astype(np.float64) 

np.array(Matrix, dtype=np.float64)

M = np.ndarray(Matrix, dtype=np.float64) 

でも動作しますが、astypeは簡単です。

Matrix変数を再作成する際に問題が発生します。その形は何ですか?

np.saveは、多次元配列をファイルに保存する最適な方法です。他の方法もありますが、シェイプとdtype情報は保存されません。


ndarray最初(位置)引数は形状ではなく、別の配列であると考えられるので、間違っています。 anyのデータがある場合はbufferパラメータで提供されます。 ndarrayは、初心者や高度なnumpyユーザーでも通常は使用されません。


Matrixとは何でしょうか。私は、パラメータのカップルとあなたのコードをしようとすると、私はmapステップでエラーが出ます:

In [495]: X = [np.random.randint(0, 2 ** 2 - 1)for _ in range(4)] 
    ...: Matrix = np.asarray([list(map(int, list(x))) for x in X]) 
    ...: 
-----> 2 Matrix = np.asarray([list(map(int, list(x))) for x in X]) 
.... 
TypeError: 'int' object is not iterable 
In [496]: X 
Out[496]: [1, 2, 1, 0] 

X番号のリストだけですか?何らかの配列のリストではありませんか?なぜMatrixの手順ですか?リストのネストされたリストを整数に変換しようとしていますか? randintはすでに整数を作成していますか?その後、あなたはfloatに変換されますか?