我有一個 numpy 矩陣。我想將行的二次方、三次方、...、n 次方附加到行的末尾。例如,
my_array = [
[1,2,3],
[2,3,4],
[3,4,5],
]
如果 n 為 3,則 my_array 應為以下
my_array = [
[1,2,3,1,4,9,1,8,27],
[2,3,4,4,9,16,8,27,64],
[3,4,5,9,15,25,27,64,125]
]
我可以按如下方式手動執行此操作:(請不要考慮下面的尺寸,我知道它們對于示例不正確)
data_poly=np.ones((209,22))
data_poly[:,0:8]=data
data_poly[:,8]=data[:,1]**2
data_poly[:,9]=data[:,2]**2
data_poly[:,10]=data[:,3]**2
data_poly[:,11]=data[:,4]**2
data_poly[:,12]=data[:,5]**2
data_poly[:,13]=data[:,6]**2
data_poly[:,14]=data[:,7]**2
data_poly[:,15]=data[:,1]**3
data_poly[:,16]=data[:,2]**3
data_poly[:,17]=data[:,3]**3
data_poly[:,18]=data[:,4]**3
data_poly[:,19]=data[:,5]**3
data_poly[:,20]=data[:,6]**3
data_poly[:,21]=data[:,7]**3
我怎樣才能自動化這個程序?
uj5u.com熱心網友回復:
這是使用廣播的一個選項,可能有一種更智能的重塑方式:
N = 3
(my_array[...,None]**(np.arange(N) 1)).swapaxes(1,2).reshape(my_array.shape[0],-1)
或使用tile/ repeat:
N = 3
np.tile(my_array, N)**np.repeat(np.arange(N) 1, N)
輸出:
array([[ 1, 2, 3, 1, 4, 9, 1, 8, 27],
[ 2, 3, 4, 4, 9, 16, 8, 27, 64],
[ 3, 4, 5, 9, 16, 25, 27, 64, 125]])
輸入:
my_array = np.array([[1,2,3],
[2,3,4],
[3,4,5]])
uj5u.com熱心網友回復:
您可以使用廣播:
my_array = np.array([[1,2,3],[2,3,4],[3,4,5]])
power = np.array([1, 2, 3]).reshape(3,1,1)
result = (my_array ** power).swapaxes(0,1)
result.reshape(-1, 9)
輸出:
array([[ 1, 2, 3, 1, 4, 9, 1, 8, 27],
[ 2, 3, 4, 4, 9, 16, 8, 27, 64],
[ 3, 4, 5, 9, 16, 25, 27, 64, 125]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/426275.html
上一篇:將numpy陣列重新排列為1d
