あなたの例のようなゼロ配列がある場合は、これを行うことができます:
b = np.array((1, 2.0, 'buckle_my_shoe'),
dtype=[('f0', '<i4'), ('f1', '<f8'), ('f2', 'S14')])
with open('myfile.dat','w') as f:
for el in b[()]:
f.write(str(el)+' ') # or `f.write(repr(el)+' ') to keep the quote marks
これは、以下を使用して 0d 配列の要素にアクセスすることで機能します[()]
。
>>> b.ndim
0
>>> b[0]
IndexError: 0-d arrays cannot be indexed
>>> b[()]
(1, 2.0, 'buckle_my_shoe')
次元が 0 の numpy 配列を定期的に使用している場合、複雑な dtype を使用するためにNamedTuple
fromcollections
を提案するかもしれません。
>>> import collections
>>> A = collections.namedtuple('A', ['id', 'val', 'phrase'])
>>> a = A(1, 2.0, 'buckle_my_shoe')
>>> a
A(id=1, val=2.0, phrase='buckle_my_shoe')
>>> a.id
1
>>> a.val
2.0
>>> a.phrase
'buckle_my_shoe'
with open('myfile.dat','w') as f:
for el in a:
f.write(repr(el)+' ')
配列に複数の要素がある場合:
a = np.array([(1, 2.0, 'buckle_my_shoe'),
(3, 4.0, 'lock_the_door')],
dtype=('i4, f8, a14'))
ファイルをどのように見せたいのか正確にはわかりません。スペースで区切られたタプルが必要な場合は、これが最善の方法だと思います。
with open('myfile.dat','w') as f:
for row in a:
f.write(repr(row)+' ')
次のようなファイルになります。
(1, 2.0, 'buckle_my_shoe') (3, 4.0, 'lock_the_door')
おそらく、コンマや括弧を使用したくない場合は、次のようにできます。
with open('myfile.dat','w') as f:
for row in a:
for el in row:
f.write(str(el)+' ')
これにより、次のファイルが得られます。
1 2.0 buckle_my_shoe 3 4.0 lock_the_door
repr
文字列の周りに引用符を保持するために使用します
with open('myfile.dat','w') as f:
for row in a:
for el in row:
f.write(repr(el)+' ')
これにより、次のファイルが得られます。
1 2.0 'buckle_my_shoe' 3 4.0 'lock_the_door'
おまけ: dtype にフィールド名がある場合は、それらも出力できます。
a.dtype.names = "index value phrase".split()
a.dtype
#dtype([('index', '<i4'), ('value', '<f8'), ('phrase', 'S14')])
with open('myfile.dat','w') as f:
for name in a.dtype.names:
f.write(name + ' ') # or write(repr(name)) to keep the quote marks
for row in a:
for el in row:
f.write(repr(el)+' ')
これらのファイルをコピーする場合は、テストケースでそれぞれを上書きできるように、'w'
notを使用していることに注意してください。'a'