2016-10-15 3 views
3
import numpy as np 

data = np.array([['Height', 'Weight'],['165', '48'],['168', '50'],['173', '53']]) 
data[0,0] = data[0,0] + "_1" 

データ[0,0]'身長'ある、と私は'Height_1'とそれを交換したいです。しかし、上記のコードは動作しません。 [0,0]要素は同じままデータPython:なぜこの場合、配列に新しい値を代入できないのですか?

data[0,0] 

'身長'

:これは、その結果を返しました。そして、自分自身を参照せずに直接置き換えると、それはまだ動作しません。

data[0,0] = "Height" + "_1" 

結果:

data[0,0] 

'身長'

しかし、私は"高さ"以外の一部の文字に置き換えるならば、それは動作します。

data[0,0] = "str" + "_1" 

結果:

data[0,0] 

'str_1が' 私は、私は全体来ている問題を説明するために、このケースを取った

。私の仕事では、いくつかの要件を満たさない要素を置き換える必要があるため、配列そのものを参照する必要があります。誰にでもこれに関する解決策がありますか?ありがとうございました。

+0

私はあなたが馬鹿だとは思わないuldは文字列とintを混在させます – jamylak

+0

@jamylakは正確ですが、OPはここで文字列を使用しています。 –

+0

@ juanpa.arrivillaga私はOPがデータに列ヘッダーを含めてはならないことを意味し、数字は文字列として保存されませんでした。 – jamylak

答えて

4

を問題は、あなたの配列であるですdtype('<U6')

>>> data = np.array([['Height', 'Weight'],['165', '48'],['168', '50'],['173', '53']]) 
>>> data.dtype 
dtype('<U6') 
>>> 
あなたは、配列を作成するときに

>>> data[0,0] = "123456789" 
>>> data 
array([['123456', 'Weight'], 
     ['165', '48'], 
     ['168', '50'], 
     ['173', '53']], 
     dtype='<U6') 
>>> 

あなたは、常に「オブジェクト」のように、あなたのDTYPEを指定することができますが、これはそもそもnumpyのスピードの利点の多くを取り除く:

それは自動的に切り捨てられます。

代わりに、長い文字列型を指定することができます

>>> data 
array([['Height', 'Weight'], 
     ['165', '48'], 
     ['168', '50'], 
     ['173', '53']], 
     dtype='<U20') 
>>> data[0,0]='Height_1' 
>>> data 
array([['Height_1', 'Weight'], 
     ['165', '48'], 
     ['168', '50'], 
     ['173', '53']], 
     dtype='<U20') 
>>> 

をしかし、注意してください、あなたはあまりにも長い制限を設定するかのように、あなたは、メモリを無駄にされます。

>>> data = np.array([['Height', 'Weight'],['165', '48'],['168', '50'],['173', '53'], ['42','88']], dtype='U20') 
>>> data.nbytes 
800 
>>> data = np.array([['Height', 'Weight'],['165', '48'],['168', '50'],['173', '53'], ['42','88']], dtype='U6') 
>>> data.nbytes 
240 

あなただけならばバイト文字列(メモリ要件の1/4)を使用することを検討してください:

>>> data = np.array([['Height', 'Weight'],['165', '48'],['168', '50'],['173', '53'], ['42','88']], dtype='S20') 
>>> data.nbytes 
200 
>>> 
+0

を指定するか、長い文字列dtypeを指定します。 U20 – hpaulj

3

など、お使いのアレイのオブジェクトタイプを指定します。次に、 a[0][0]+='_1'は、トリックを行います

a = np.array([['Height', 'Weight'],['165', '48'],['168', '50'],['173', '53']],dtype=object) 

、あなたが得る:

array([['Height_1', 'Weight'], 
     ['165', '48'], 
     ['168', '50'], 
     ['173', '53']], dtype=object) 
関連する問題