2017-11-12 7 views
2

タプルに格納した値x,yに基づく値を持つ行列を作成しようとしています。私はタプルを反復し、データに簡単な計算を実行するためにループを使用します。numpyのタプルの値を使用して行列を作成する

import numpy as np 

# Trying to fit quadratic equation to the measured dots 

N = 6 
num_of_params = 3 

# x values 
x = (1,4,3,5,2,6) 

# y values 
y = (3.96, 24.96,14.15,39.8,7.07,59.4) 

# X is a matrix N * 3 with the x values to the power of {0,1,2} 
X = np.zeros((N,3)) 
Y = np.zeros((N,1)) 

print X,"\n\n",Y 

for i in range(len(x)): 
    for p in range(num_of_params): 
     X[i][p] = x[i]**(num_of_params - p - 1) 
    Y[i] = y[i] 

print "\n\n" 
print X,"\n\n",Y 

が、これは簡単な方法で達成することができますか?私は行列を初期化するための何らかの方法を探していますX = np.zeros((N,3), read_values_from = x)

可能でしょうか?別の簡単な方法がありますか?

パイソン2.7

答えて

2

np.newaxis/Noneを用いて第2の一方に沿って(長さ= 1と薄暗い)シングルトンDIMと2Dxのアレイバージョンを拡張。これにより、ベクトル化された方法で2D出力を得るために、NumPy broadcastingを利用することができます。 yの同様の哲学。

したがって、実装は次のようになり - フード下配列変換の世話を

X = np.asarray(x)[:,None]**(num_of_params - np.arange(num_of_params) - 1) 
Y = np.asarray(y)[:,None] 

またはXを取得するnp.powerための内蔵外メソッドを使用 -

あるいは
X = np.power.outer(x, num_of_params - np.arange(num_of_params) - 1) 

Yについては、np.expand_dims -

Y = np.expand_dims(y,1) 
関連する問題