2016-08-19 8 views
2

を更新し得ていない次のように私はnumpyの配列を有する:numpyのアレイ素子

supp = np.array([['A', '5', '0'], ['B', '3', '0'], ['C', '4', '0'], ['D', '1', '0'], ['E', '2', '0']]) 

、I [1]/6 [2]行として行を更新します。私が使用している ..

for row in supp: row[2] = row[1].astype(int)/6

しかし、行[2]影響を受けないままのようです。私は、Python 3.5.2とnumpyの1.11.1を使用してい

>>> supp 
array([['A', '5', '0'], 
    ['B', '3', '0'], 
    ['C', '4', '0'], 
    ['D', '1', '0'], 
    ['E', '2', '0']], 
    dtype='<U1') 

何か助けていただければ幸いです。おかげさまで

+0

ヒント: 'supp [0,0] = 5/6'の結果を見てください –

+2

文字列と数字を同じ配列に入れようとするのは悪い考えです。あなたがやっていることに応じて、Pandasはあなたのユースケースのためのより適切なツールを持っているかもしれません。あるいは、最初の列を取り除き、float dtypeの配列を使うほうが良いかもしれません。 – user2357112

答えて

4

np.arrayには、入力には長さが1の文字列しか含まれていないため、自動的に文字列がsupp.dtype == '|S1'と仮定されるタイプが1つあります。 numpyは自動的に更新された入力をあなたのケースでは1、の長さの文字列に変換します。ジェネリック型objectのものであるとし、両方の文字列とint型または浮動小数点数または何かを持っていることができるようになり、それを強制的に:

supp = np.array([['A', '5', '0'], ['B', '3', '0'], ['C', '4', '0'], ['D', '1', '0'], ['E', '2', '0']]) 
supp = supp.astype(object) 

for row in supp: 
    row[2] = int(row[1])/6 

結果:

[['A' '5' 0.8333333333333334] 
['B' '3' 0.5] 
['C' '4' 0.6666666666666666] 
['D' '1' 0.16666666666666666] 
['E' '2' 0.3333333333333333]] 

代わりにあなたもdtype'|Sn'を使用することができます

supp = np.array([['A', '5', '0'], ['B', '3', '0'], ['C', '4', '0'], ['D', '1', '0'], ['E', '2', '0']]) 
supp = supp.astype('|S5') 

for row in supp: 
    row[2] = int(row[1])/6 

結果:

の大きな値を持ちます
[['A' '5' '0.833'] 
['B' '3' '0.5'] 
['C' '4' '0.666'] 
['D' '1' '0.166'] 
['E' '2' '0.333']] 

この場合、必要な場合は文字列のみを使用しています。

+0

ありがとうございます。今日は新しいことを学びました。 :) – lU5er

+1

私も! ;)ところで、私は完全に2番目のuser2357112のコメントです。おそらくそれについて考えなければなりません... 'dtype = object'を使うと便利ですが、通常はnumpyを使う点である数値計算のスピードアップを緩和します。 – Julien

関連する問題