2017-03-20 15 views
1

メソッドでnp.fromfileを使用するいくつかのレガシーコードを更新しようとしています。この方法でnumpyのソースを検索しようとすると、np.core.records.fromfileしか見つかりませんが、ドキュメントを検索するとnp.fromfileが見つかります。これらの2つの方法を見てみると、彼らはそれぞれ異なる方法であるように私に感じさせる異なるkwargsを持っていることがわかります。Numpy fromfileの2つの実装?

私の質問は以下のとおりです。

1)どこnp.fromfileのソースが配置されていますか?

2)なぜ同じ名前の2つの異なる機能がありますか?あなたが違いを気にしていない場合、2人が違うふうに振る舞うので、これは明らかに混乱することがあります。特にnp.core.records.fromfileは、ファイルが含まれているバイト数より多くのバイトを読み取ろうとするとエラーが発生し、np.fromfileは含まれません。下に最小限の例があります。

In [1]: import numpy as np 

In [2]: my_bytes = b'\x04\x00\x00\x00\xac\x92\x01\x00\xb2\x91\x01' 

In [3]: with open('test_file.itf', 'wb') as f: 
      f.write(my_bytes) 

In [4]: with open('test_file.itf', 'rb') as f: 
      result = np.fromfile(f, 'int32', 5) 

In [5]: result 
Out [5]: 

In [6]: with open('test_file.itf', 'rb') as f: 
      result = np.core.records.fromfile(f, 'int32', 5) 
ValueError: Not enough bytes left in file for specified shape and type 
+0

はい、レコード配列を扱うために特化した 'np.core.records.fromfile'のソースコードにリンクしています。 –

+0

@ juanpa.arrivillaga私はそれを認識しています。残念ながら、これは私がソースで見つけることができるfromfileの実装された唯一の宣言です。私は 'np.fromfile'のソースがどこにあるのか知りたいです – Grr

+0

' records'バージョンの本質は、正しいdtypeとシェイプの受信者配列を作成し、バイナリファイル 'readinto'メソッドを使ってバイトをロードすることですその '.data'属性に追加します。 – hpaulj

答えて

3

あなたはnp.fromfilehelpを使用している場合は、非常に...有益な何かを見つけるには:

Help on built-in function fromfile in module numpy.core.multiarray: 

fromfile(...) 
    fromfile(file, dtype=float, count=-1, sep='') 

    Construct an array from data in a text or binary file. 

    A highly efficient way of reading binary data with a known data-type, 
    as well as parsing simply formatted text files. Data written using the 
    `tofile` method can be read using this function. 

私の知る限り、これはCで実装されており、hereを見つけることができます。

バイナリデータを保存してロードしようとしている場合は、もうnp.fromfileを使用しないでください。プラットフォームに依存しないバイナリ形式を使用するnp.savenp.loadを使用する必要があります。

+0

そして、 'C'リンクを理解するためには、さらに掘り下げて' PyArray_FromFile'の実装を見つける必要があります。 'numpy'組み込み関数は単なる人間にとっての謎です。 – hpaulj

+0

@hpaulj heh、そう、それは非常に典型的です。 Cで書かれた 'array_some_function'は基本的にCで書かれた' PyArray_SomeFunction'のラッパーです.... 'PyArray_SomeFunction'を追跡する幸運 –

関連する問題