これは、MATLABの構文で、 numpyでない:
np.matrix
しかし
A = [1 0 0 2; 3 3 3 2; 3 3 0 2; 3 4 4 4]
はでそれをエミュレート:
In [172]: A = np.matrix('1 0 0 2; 3 3 3 2; 3 3 0 2; 3 4 4 4')
In [173]: A
Out[173]:
matrix([[1, 0, 0, 2],
[3, 3, 3, 2],
[3, 3, 0, 2],
[3, 4, 4, 4]])
あなたの仕事は2倍、最も頻繁要素、その後、他のすべてを置き換える知見です。どちらのアクションも、行列が2次元であるか、または配列ではなくmatrix
であるかによって異なります。
In [174]: A1=A.A1
In [175]: A1
Out[175]: array([1, 0, 0, 2, 3, 3, 3, 2, 3, 3, 0, 2, 3, 4, 4, 4])
np.unique
私たちの周波数カウントを与えることができますので、我々は(unique
は1Dが必要)で最も頻度の高い値を微ことができます。
In [179]: u,c = np.unique(A1, return_counts=True)
In [180]: u
Out[180]: array([0, 1, 2, 3, 4])
In [181]: c
Out[181]: array([3, 1, 3, 6, 3])
In [182]: np.argmax(c)
Out[182]: 3
In [183]: u[np.argmax(c)]
Out[183]: 3
私はDivakarがscipy
mode
の代わりに使用することを驚いていますunique
。彼はunique
を使うことの専門家の一員です。 :)
Divakarのnp.where
の使用は、置換を実行する最も簡単な方法です。ちょうどそれの楽しみのため
は、ここではマスクされた配列のアプローチです:
In [196]: np.ma.MaskedArray(A, A!=3)
Out[196]:
masked_matrix(data =
[[-- -- -- --]
[3 3 3 --]
[3 3 -- --]
[3 -- -- --]],
mask =
[[ True True True True]
[False False False True]
[False False True True]
[False True True True]],
fill_value = 999999)
In [197]: _.filled(0)
Out[197]:
matrix([[0, 0, 0, 0],
[3, 3, 3, 0],
[3, 3, 0, 0],
[3, 0, 0, 0]])
またはインプレース変更:
In [199]: A[A!=3] = 0
In [200]: A
Out[200]:
matrix([[0, 0, 0, 0],
[3, 3, 3, 0],
[3, 3, 0, 0],
[3, 0, 0, 0]])
np.unique' 'に良いコール、numpyのにこだわります! – Divakar
ありがとうhpaulj、これは非常に有用でした。私はMatlabで作業しており、Pythonも試してみるべきだと決めました。ご支援ありがとうございます。 –