2 回答

TA貢獻1824條經驗 獲得超5個贊
我舉了一些如何使用numpy的例子,希望它能回答你的問題。通常,對于數值運算,對于numpy,對于更通用的運算(字符串,聚合等),則用于熊貓。一般來說,pandas很適合準備數據并將其傳遞到更低級別的數據結構,例如numpy到更重的計算
你問1)使用哪種數據結構?去多維數組在麻木
2)如何獲取列數?對于一個 np.數組,你只需要使用 .shape,它是 (dim1, dim2 .... ) 的元組通常 (n_rows, cols)
3)是一個1維的np.數組,這就是為什么你有這樣的形狀(n_rows,),所以如果你打印y,你會看到一個矢量...所以你只有一列。np.數組在開始時可能會令人困惑,因為允許您創建比向量或矩陣(如張量)更通用的東西,這將是形狀(x,y,z)的np.數組。因此,談論形狀的np.數組的列是有道理的(n_rows,n_cols)
4) 如果列 std() 為 0,則所有實例都是相同的,因此基本上沒有意義將此規范化應用于 1 列。(只需跳過它)
更詳細地說,通常標準化列的目標是使列中的值落在值范圍內。即介于 0 和 1 之間。例如,這是在機器學習中完成的,以避免具有較大值的訓練數據的列(特征)對模型的影響大于具有較小值的模型。您可以注意到,您正在應用的規范化不會強制列位于 [0, 1] 中。因此,強制進行歸一化,并且不會像其他規范化(除非max和min = 0)那樣給出除法誤差將是:
x_raw = (x_raw - x_raw.min())/(x_raw.max() - x_raw.min())
print(x_raw)
import numpy as np
def norm_equ(x, y):
temp1 = np.linalg.pinv(np.dot(np.transpose(x), x))
temp2 = np.dot(temp1, np.transpose(x))
theta = np.dot(temp2, y)
return theta
# create a matrix 50x10 random matrix
x_raw = np.random.random([50,10])
y = np.random.random([50])
print(x_raw.shape) #-----> (50, 10)
print(y.shape) #-----> (50, ) a vec "50 x 1"
# transform raw input
x_norm = (x_raw - x_raw.mean())/x_raw.std()
x_0 = np.ones((x_norm.shape[0],1))
x_input = np.hstack((x_0, x_norm))
print(x_input.shape) #-----> (51, 11)
theta = norm_equ(x_input, y)
print(theta.shape) #-----> (11, )
# load from csv file
arrays_from_file = np.loadtxt(fname="dummy.csv",
delimiter=",",
skiprows=1)
y = np.random.random([arrays_from_file.shape[0]])
print(arrays_from_file.shape) #-----> (2, 6)
print(y.shape) #-----> (2, )
another_theta = norm_equ(arrays_from_file, y)
print(another_theta.shape) #-----> (6, )

TA貢獻1796條經驗 獲得超4個贊
為什么要將 x 轉換為數據幀?似乎它應該只是一個numpy數組,給定其余的代碼。
如果你想要一個有三列的數據幀,那么它將是
df = pd.DataFrame({'x_input': x, 'x_0': 1})
df['x_input_norm'] = df['x_input'] - df['x_input'].mean() / df['x_input'].std()
添加回答
舉報