Python 使用3个索引对4维数组进行切片时会发生什么情况?
我试图理解为什么我的算法的准确性突然发生了巨大的变化。当我发现在标准化我的四维训练/测试集时,我只使用了3个索引时,我做了一个小小的改变,添加了一个forthPython 使用3个索引对4维数组进行切片时会发生什么情况?,python,arrays,numpy,Python,Arrays,Numpy,我试图理解为什么我的算法的准确性突然发生了巨大的变化。当我发现在标准化我的四维训练/测试集时,我只使用了3个索引时,我做了一个小小的改变,添加了一个forth:。现在我很好奇——下面的旧代码/新代码也会这样做吗?如果不是,那么仅使用3个索引对4维数组进行索引是如何工作的 旧版: # standardize all non-binary variables channels = 14 # int(X.shape[1]) mu_f = np.zeros(shape=chan
:
。现在我很好奇——下面的旧代码/新代码也会这样做吗?如果不是,那么仅使用3个索引对4维数组进行索引是如何工作的
旧版:
# standardize all non-binary variables
channels = 14 # int(X.shape[1])
mu_f = np.zeros(shape=channels)
sigma_f = np.zeros(shape=channels)
for i in range(channels):
mu_f[i] = np.mean(X_train[:,i,:])
sigma_f[i] = np.std(X_train[:,i,:])
for i in range(channels):
X_train[:, i, :] -= mu_f[i]
X_test[:, i, :] -= mu_f[i]
if (sigma_f[i] != 0):
X_train[:, i, :] /= sigma_f[i]
X_test[:, i, :] /= sigma_f[i]
# standardize all non-binary variables
channels = 14
mu_f = np.zeros(shape=channels)
sigma_f = np.zeros(shape=channels)
for i in range(channels):
mu_f[i] = np.mean(X_train[:,i,:,:])
sigma_f[i] = np.std(X_train[:,i,:,:])
for i in range(channels):
X_train[:, i, :, :] -= mu_f[i]
X_test[:, i, :, :] -= mu_f[i]
if (sigma_f[i] != 0):
X_train[:, i, :, :] /= sigma_f[i]
X_test[:, i, :, :] /= sigma_f[i]
新建:
# standardize all non-binary variables
channels = 14 # int(X.shape[1])
mu_f = np.zeros(shape=channels)
sigma_f = np.zeros(shape=channels)
for i in range(channels):
mu_f[i] = np.mean(X_train[:,i,:])
sigma_f[i] = np.std(X_train[:,i,:])
for i in range(channels):
X_train[:, i, :] -= mu_f[i]
X_test[:, i, :] -= mu_f[i]
if (sigma_f[i] != 0):
X_train[:, i, :] /= sigma_f[i]
X_test[:, i, :] /= sigma_f[i]
# standardize all non-binary variables
channels = 14
mu_f = np.zeros(shape=channels)
sigma_f = np.zeros(shape=channels)
for i in range(channels):
mu_f[i] = np.mean(X_train[:,i,:,:])
sigma_f[i] = np.std(X_train[:,i,:,:])
for i in range(channels):
X_train[:, i, :, :] -= mu_f[i]
X_test[:, i, :, :] -= mu_f[i]
if (sigma_f[i] != 0):
X_train[:, i, :, :] /= sigma_f[i]
X_test[:, i, :, :] /= sigma_f[i]
我不明白为什么额外的
:
有什么不同。当我对一个简单的np.mean(X[:,1])
vnp.mean(X,1,:,:])等进行时间测试时,它不起作用
至于plonser的
建议,你可以对整个事情进行矢量化,关键是要意识到mean
和std
需要添加一些参数。检查他们的文档并使用示例数组
Xmean = np.mean(X,axis=(0,2,3),keepdims=True)
X -= Xmean
X /= Xmean
你想知道为什么它会慢一些,或者你如何能加快速度吗?…因为几乎所有的东西都可以在你的代码中矢量化,这会提高性能…那太好了!如果你在这里添加一个答案,这会更有意义。要回答你的问题,是的,它们都做完全相同的事情。实际上,你可以省去所有的trailing:
仍然会得到相同的结果。他将变量命名为X\u train
:)这只是一个示例。谢谢。您是否也确定我的旧代码与我的新代码对X\u train
中的不同类型的值返回相同的结果?否。可能我在您尝试的操作中遗漏了一些细微差别。您需要设置并行函数并对其进行测试,包括值和速度。