をあなたの例では、不可解されているため、私は約dtype
を尋ねました。
私は3つの要素(1D)と3つのフィールドを持つ構造化された配列にすることができます:私は名前で一つのフィールドにアクセスすることができます
In [1]: A = np.ones((3,), dtype='i,i,i')
In [2]: A
Out[2]:
array([(1, 1, 1), (1, 1, 1), (1, 1, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4')])
が
In [3]: A['f0'].shape
Out[3]: (3,)
(追加ブラケットは、物事を変更しません)私は2つのフィールドにアクセスする場合は、私はまだ1次元配列
In [4]: A[['f0','f1']].shape
Out[4]: (3,)
In [5]: A[['f0','f1']]
Out[5]:
array([(1, 1), (1, 1), (1, 1)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
を取得し、私はトイレ場合は実際にそれらの余分ブラケットは、重要ではありません配列は、単純な2Dのものであれば、私はまだ
In [24]: A=np.ones((3,3),int)
In [25]: A[0].shape
Out[25]: (3,)
In [26]: A[[0]].shape
Out[26]: (1, 3)
In [27]: A[[0,1]].shape
Out[27]: (2, 3)
しかし、配列に関係なくかどうかの、2Dであることを確認することの質問に対するとしてあなた形状を得ることはありません値
In [22]: A['f0']
Out[22]: array([1, 1, 1], dtype=int32)
In [23]: A[['f0']]
Out[23]:
array([(1,), (1,), (1,)],
dtype=[('f0', '<i4')])
でのkインデックスは、1Dを返すか、2、あなたの関数は、あなたがar.ndim
代わりのlen(ar.shape)
をテストすることができ、基本的
def reshape_to_vect(ar):
if len(ar.shape) == 1:
return ar.reshape(ar.shape[0],1)
return ar
okです。しかし、いずれの方法でもコストがかからず、実行時間が最小限に抑えられます。大規模な配列操作はありません。 reshape
はデータをコピーしません(ストライドが奇妙な場合を除きます)。共有データポインタを使用して新しい配列オブジェクトを作成するのは単なるコストです。
np.atleast_2d
のコードを見てください。 0dと1dをテストします。 1dの場合はresult = ary[newaxis,:]
を返します。余分な軸を最初に追加すると、軸を追加するための位置がより自然なnumpy
になります。最後に追加します。
ar.reshape(ar.shape[0],-1)
は、if
テストを迂回する巧妙な方法です。小さなタイミングでテストする方が高速ですが、関数呼び出し層の効果であるマイクロ秒について話しています。
np.column_stack
は、必要に応じて列配列を作成する別の関数です。これは、使用しています:
if arr.ndim < 2:
arr = array(arr, copy=False, subok=True, ndmin=2).T
'dtype'とは何ですか?構造化されたように見える。 – hpaulj
1dまたは2d配列にどうやって終わるかの例として、これを使用しました。私の質問はエレガントに1dを2d配列に体系的に変換する方法です。 – DevShark