2016-09-17 8 views
1

私は線形代数を行う必要があるときにベクトルを列ベクトルとして考えるのが簡単です。したがって、私は(n、1)のような形を好む。numpy(n、)ベクトルから(n、1)ベクトルへの整形

シェイプ(n、)と(n、1)のメモリ使用量に大きな違いはありますか?

どのような方法が望ましいですか?

(n、1)ベクトルに(n、1)ベクトルを再形成する方法。何とかb.reshape((n、1))はそのトリックをしません。

a = np.random.random((10,1)) 
b = np.ones((10,)) 
b.reshape((10,1)) 
print(a) 
print(b) 

[[ 0.76336295] 
[ 0.71643237] 
[ 0.37312894] 
[ 0.33668241] 
[ 0.55551975] 
[ 0.20055153] 
[ 0.01636735] 
[ 0.5724694 ] 
[ 0.96887004] 
[ 0.58609882]] 
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] 
+0

ohkey。どういうわけか、np.reshapeやその他のnp.methodsは変更されませんが、obj.reshapeやobj.methodは変更されます。 Okありがとう – tomtom

+0

'b.shape =(10,1)'は、インプレース形の構文です。 – hpaulj

答えて

2

は新しいビューまたはコピーを返します(新しいシェイプによって異なります)。配列内の配列は変更されません。

b.reshape((10, 1)) 

このように、作成されたビュー/コピーは何も割り当てられていないため、実質的には操作がありません。 「修正」は簡単です:

b_new = b.reshape((10, 1)) 

2つの図形の間で使用されるメモリの量が全く異なる必要はありません。ナンシーアレイはstridesという概念を使用しているため、寸法(10,)(10, 1)は両方とも同じバッファを使用できます。次の行と列にジャンプする量だけが変化します。

関連する問題