3

私はnumpyにかなり慣れていないので、再配列の値を置き換えようとしています。だから私はこの配列を持っています:

import numpy as np
d = [('1', ''),('4', '5'),('7', '8')]
a = np.array(d, dtype=[('first', 'a5'), ('second', 'a5')])

私はこのようなことをしたいと思います:

ind = a=='' #Replace all blanks
a[ind] = '12345'

しかし、それは正しく機能しません。私はこれを行うことができました:

col = a['second']
ind = col=='' #Replace all blanks
col[ind] = '54321'
a['second'] = col

これは機能しますが、再配列全体でそれを行う方法が必要です。誰もがより良い解決策を持っていますか?

4

2 に答える 2

5

numpy の「要素ごと」の操作 (ループなしで配列のすべての要素に対して一度にいくつかの機能を実行できる) は、私の知る限り、再配列では機能しません。これは、個々の列でのみ行うことができます。

再配列を使用する場合、別の解決策が必要でしたが、最も簡単な解決策はさまざまな列をループすることだと思いますが、次のようにかなり自動化できます。

for fieldname in a.dtype.names:
    ind = a[fieldname] == ''
    a[fieldname][ind] = '54321'

しかし、再配列が本当に必要で、通常の ndarray だけを使用できないかどうかを検討する必要があるかもしれません。確かに、(例のように) データ型が 1 つしかない場合、唯一の利点は列名です。

于 2011-06-06T22:35:32.760 に答える
-1

考えられる解決策の 1 つ:

a[np.where(a['second']=='')[0][0]]['second']='12345'
于 2011-06-07T16:53:55.510 に答える