2017-11-19 6 views
2

私は形状が(X)の配列を持っています(826,2)。私は形状のX_expanded(X.shape [0]、6)というゼロ点の配列をもう一度持っています。私が特長1、feature0^2、特長1^2、特長1 *特長2、配列X.numpy配列の値を変更するには

の1は私がX_expandedになりたい

X = np.array([ 
    [0,0], 
    [1,0], 
    [2.61,-1.28], 
    [-0.59,2.1] 
]) 

例えば、feature0でX_expandedの要素を交換したいです

([[ 0. , 0. , 0. , 0. , 0. , 1.], 
    [ 1. , 0. , 1. , 0. , 0. , 1.], 
    [ 2.61 , -1.28 , 6.8121, 1.6384, -3.3408, 1.], 
    [-0.59 , 2.1 , 0.3481, 4.41 , -1.239 , 1.]]) 
+0

'これは何を行うための最善の方法であることは、'だから、あなたはいくつかの方法がありますか?それをするために? –

答えて

0
X = np.array([ 
    [0,0], 
    [1,0], 
    [2.61,-1.28], 
    [-0.59,2.1] 
]) 


X_e = np.zeros((X.shape[0], 6)) 

# Retain first two columns from X 
X_e[:,:2] = X 
# Set 2nd and 3rd columns equals to squares of X's 1st and 2nd column 
X_e[:,2:4] = X**2 
# Set 5th column equal to product of X's 1st and 2nd columns 
X_e[:,4] = X[:,0] * X[:,1] 
# Set 6th column to all ones 
X_e[:,5] = 1 
+1

'X_e [:、2:4] = X ** 2' – gboffi

+0

この回答は、**長さ**と**コンテンツ**のために低品質とフラグされていました。あなたの答えと一緒に説明を提供することを検討してください。 – aaron

0

あなたは最初から配列を作成または空の配列を作成し、スライスして値を記入するか、

import numpy as np 
X = np.array([[0,0],[1,0],[2.61,-1.28],[-0.59,2.1]]) 
Xe = np.block([X,X**2,np.prod(X,axis=1,keepdims=1),np.ones([X.shape[0],1])]) 
+0

'np.concatenate(...、axis = -1)'がここではより高速になります – Eric

0

np.hstackを使用して、必要に応じて列を水平に積み重ねることもできます。

X_extended = np.hstack((X, X**2, np.prod(X,axis=1,keepdims=1), np.ones([X.shape[0],1]))) 
print(X_extended) 

[[ 0.  0.  0.  0.  0.  1. ] 
[ 1.  0.  1.  0.  0.  1. ] 
[ 2.61 -1.28 6.8121 1.6384 -3.3408 1. ] 
[-0.59 2.1  0.3481 4.41 -1.239 1. ]] 

タイミング:冗長ビットは、@Bertによって答えはnp.hstack()に対し、最速であると思わ及びnp.block()はほぼ同じであり、リストの内包が最も遅いですが

X = np.random.random((100000,2)) 

# np.hstack() @akilat90 
%timeit np.hstack((X, X**2, np.prod(X,axis=1,keepdims=1), np.ones([X.shape[0],1])))  
100 loops, best of 3: 4.92 ms per loop 

# np.block() @percusse 
%timeit np.block([X,X**2,np.prod(X,axis=1,keepdims=1),np.ones([X.shape[0],1])]) 
100 loops, best of 3: 5.01 ms per loop 

# @Bert's Answer 
def bert(X): 
    X_e = np.zeros((X.shape[0], 6)) 

    X_e[:,:2] = X 
    X_e[:,2] = X[:,0] * X[:,0] 
    X_e[:,3] = X[:,1] * X[:,1] 
    X_e[:,4] = X[:,0] * X[:,1] 
    X_e[:,5] = 1 

    return X_e 

%timeit bert(X) 
100 loops, best of 3: 3.63 ms per loop 

# list comprehension @Joe Iddon 
%timeit np.array([[i, j, i**2, j**2, i*j] for i,j in X]) 
1 loop, best of 3: 246 ms per loop 

0

私はIMO非常に読みやすいですlist-comprehensionでこれを行うだろう:与え

np.array([[i, j, i**2, j**2, i*j] for i,j in X]) 

array([[ 0. , 0. , 0. , 0. , 0. ], 
     [ 1. , 0. , 1. , 0. , 0. ], 
     [ 2.61 , -1.28 , 6.8121, 1.6384, -3.3408], 
     [-0.59 , 2.1 , 0.3481, 4.41 , -1.239 ]]) 
関連する問題