2017-02-09 2 views
-1

現在、私は図形(33、)を持つ要素Xを持っています。私は各行に501の要素があることを知っているので、これを(33、501)に変更したいと思います。 Fe。 X[0] = [0, 1, 0, 0, .. 0, 1] 私はValueError: total size of new array must be unchangedPython - オブジェクトの形状を変更しますか?

np.reshape(X, (33,501)) 

しかし、それがエラーを試みました。たとえ各列が501であっても。

+2

'X'は、任意の「行」を持っていない、それは形だが、 '(33、)' ...明らかにあなたがいます間違い。 –

+0

「X」と「X [0]」はどのようなタイプですか? 'X = np.array(X)' –

+0

'X.dtype'は' dtype( 'O') 'を返します。' X [0] 'はリストです。 –

答えて

1

開始する構造体は、2次元配列ではなく、リストを要素とする1次元配列です。それは同じように見えるかもしれませんが、実際は全く異なっています。

典型的な(例外があります)m x n arrayは、numnpyが正しい方法で([i、j]のように)インデックスを解釈できるように、mn要素の線形ブロックといくつかの "メタデータ"です。

あなたの配列はオブジェクト参照の1dブロック(C言語でのポインタ)なので、個々の要素を解決したい場合は、別のレベルの間接参照を追加します。最初にリストを取り出し、次にその要素を取り出します。

あなたの配列は、適切な配列があるので便利でスピードが向上しないので、おそらくそれを変換するのが最善です。

通常、np.arrayは互換性のある長さのネストされたシーケンスを可能な限り深い配列に変換します。あなたの場合は、技術的には既に配列なので、例外であるので、np.arrayはシェイプを含めてそれを浅くコピーするだけです(リスト参照はコピーしますがリスト自体はコピーしません)。

これを迂回する1つの方法は、変換する前に、リストにキャストすることです:

np.array(list(original_array)) 
0

私の推測では、あなたはその中に501の長さである33リストを持つリストを持っているということです。

2次元配列(マトリックス)またはデータフレームに変換できますが、これはいくつかの方法で行うことができます。

関連する問題