Я привожу несколько примеров того, как использовать numpy, надеюсь, он ответит на ваши вопросы. Как правило, для числовых операций go для numpy и для более общих c операций (строки, агрегирование и т. Д. c) go для pandas. В целом pandas подходит для подготовки данных и передачи их в структуру данных более низкого уровня, такую как numpy, в более сложные вычисления
, которые вы спросили 1), какую структуру данных использовать? go для многомерных массивов в numpy
2) как получить количество столбцов? для np.array вам просто нужно использовать .shape, если это кортеж (dim1, dim2 ....), обычно (n_rows, cols)
3) это np.array 1-го измерения, вот почему у вас есть такая форма (n_rows,), поэтому, если вы напечатаете y, вы увидите вектор ... так что у вас будет только один столбец. Вначале np.arrays может сбить с толку, потому что позволяет вам создавать вещи более обобщенные c, чем векторные или матрицы, такие как тензоры, которые будут np.array формы (x, y, z). Поэтому имеет смысл говорить о столбцах для np.arrays of shape (n_rows, n_cols)
4) если столбец std () равен 0, все экземпляры одинаковы, поэтому в принципе нет смысла применять это нормализация в графе единиц. (просто пропустите это)
Более подробно. Обычно цель стандартизации ваших столбцов состоит в том, чтобы значения в этих столбцах попадали в диапазон значений. То есть между 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, )