2017-09-09 3 views
0

np.random.uniform()を使用してb配列を生成した場合、問題なく再構成できます(大きい配列aで掛けることができます)。私は、同じ行がnp.bincount()を使用してbを生成しようとした場合でも、私はnumpy.bincount()(ValueError)の後に再形成できません

ValueError: cannot reshape array of size 7 into shape (20,) 

も両方ab配列が両方のブロックに、同一の形状を有していると思っ得ます。

import numpy as np 

a = np.random.uniform(0., 1., 20) 

# Works 
b = np.random.uniform(0., 1., 7) 
b.resize(a.shape) 
d = b * a 

# Does not work 
c = [0, 4, 5, 4, 1, 3, 4, 5, 6, 6, 5, 6, 4, 6, 3, 1, 5, 4, 6, 0] 
b = np.bincount(c) 
b.reshape(a.shape) 
d = b * a 
+0

なぜbincount出力は入力と同じ要素数ですか? – Divakar

+0

編集した質問をご覧ください。ランダムな世代の整数を削除しました。 – Gabriel

+0

'c'は0から始まる7つの一意の番号を持つので、bincountは7つの要素を持っています。したがって、7エレムの配列を20エレムの形状に変形することはできません。 – Divakar

答えて

1

NumPys resizeは、要素の総数を変更できます。新しいシェイプが小さい場合は要素を破棄し、新しいシェイプが大きい場合は要素を0で埋めます(またはresize関数を使用する場合は配列の値を繰り返します)。したがって、サイズ7からサイズ20の配列をサイズ変更すると問題ありません。

指定された形状の新しい配列を返します。

新しい配列が元の配列より大きい場合、新しい配列はaの繰り返しコピーで埋められます。この動作は、a.resize(new_shape)とは異なり、a .resizeの繰り返しコピーではなく0で埋められます。

しかし、reshapeでは、要素の数を一定に保つ必要があります。そのため、長さ7の配列をサイズ20の配列に再構成することはできません。

データを変更せずに新しいシェイプを配列に与えます。また


reshape方法(および機能)インプレースの配列を変更しないでください。 resize方法のみです(resize機能もありません)。

ありがとう@ user2357112これを指摘してください!

+1

'resize' *関数*は要素を繰り返します。 'resize' *メソッドはゼロを埋めます。また、 'resize'メソッドは' resize'関数と 'reshape'の両方の変形とは異なり、配列を変更します。 – user2357112

+0

@ user2357112はい、答えを明確にしました。私は、サイズ変更機能が使用されていると思った。質問を十分に慎重に読まなかったのは間違いだ。 – MSeifert

+0

ありがとう!あなたは貧しい質問を役に立つ答えに変えることができました。 – Gabriel

関連する問題