2016-09-06 5 views
1

私は次のようにすべてのエントリとしてイータを持つ配列を作成する方法を知っている配列異なる最初と最後の要素と他のすべての要素とのnumpyの配列を作成し、同じ

N = 5 # size of the array 
eta = 2 
a00 = 1 # first element of array 
a0N = 3 # last element of array 
# all entries should be 'eta' except the first and the last one 
diag = [a00, eta, eta, eta, a0N] 

の次のタイプを作成します。

diag = np.zeros(N) + eta 

私は np.zeros(N)を使用して、私が欲しいものを作成することができますか私はnumpy.ndarrayなど、より低レベルのコンストラクタを使用する必要がありますか? 。

答えて

3

私は、この種の配列の組み込みメソッドについて認識していません。これはかなり標準的なやり方です。

N = 5 # size of the array 
eta = 2 
a00 = 1 # first element of array 
a0N = 3 # last element of array 

# make a vector of 'etas', then change the first and last element 
diag = np.ones(N,)*eta 
diag[0] = a00 
diag[-1] = a0N 

もう1つの回避策は、希望する配列の要素のリストを作成することです。示すように、あなたは、np.arrayを持つ配列としてそれをキャストすることができます。

list_diag = [a00] + [eta for i in range(N-2)] + [a0N] 
diag = np.array(list_diag) 

注:後者の溶液はかわいいかもしれないが、Nが大きくなるにつれてかなり遅くなります。

+2

大きな「N」の場合、「np.zeros((N、))+η」はnp.ones((N))*ηより高速です。 – donkopotamus

+0

ああ、あなたは良い点を作っています。 – benten

+2

'np.ones(N)* eta'の代わりに' np.full(N、eta) 'を使うことができます。 (numpyバージョン1.8.0以降が必要です)。 –

関連する問題