Python 如何更改numpy数组的值
我有一个形状为(826,2)的numpy数组“X”。我有另一个由“X_扩展”形状的零组成的numpy数组(X.shape[0],6)。我想用数组X的feature0,feature1,feature0^2,feature1^2,feature1*feature2,1替换展开的X_的元素 比如说Python 如何更改numpy数组的值,python,arrays,numpy,Python,Arrays,Numpy,我有一个形状为(826,2)的numpy数组“X”。我有另一个由“X_扩展”形状的零组成的numpy数组(X.shape[0],6)。我想用数组X的feature0,feature1,feature0^2,feature1^2,feature1*feature2,1替换展开的X_的元素 比如说 X = np.array([ [0,0], [1,0], [2.61,-1.28], [-0.59,2.1] ]) 我想把X_扩展成 ([[ 0. , 0.
X = np.array([
[0,0],
[1,0],
[2.61,-1.28],
[-0.59,2.1]
])
我想把X_扩展成
([[ 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.]])
可以从头开始构造数组,也可以创建空数组并用切片填充值
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])])
还可以根据需要使用水平堆叠列
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. ]]
计时:
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
虽然有点冗长,但@Bert的答案似乎是最快的,而
np.hstack()
和np.block()
几乎是一样的,列表理解是最慢的。我会用列表理解来做这件事,它在我看来非常可读:
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 ]])
做这件事的最佳方法是什么?
那么,你有一些方法吗?X_e[:,2:4]=X**2
此答案因其长度和内容而被标记为低质量。考虑提供一个解释和你的答案。<代码> NP.CouthNeNATE(…,轴= -1)< /C> >将在这里更快。
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 ]])