Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用3个索引对4维数组进行切片时会发生什么情况?_Python_Arrays_Numpy - Fatal编程技术网

Python 使用3个索引对4维数组进行切片时会发生什么情况?

Python 使用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个索引时,我做了一个小小的改变,添加了一个forth
。现在我很好奇——下面的旧代码/新代码也会这样做吗?如果不是,那么仅使用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])
v
np.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
中的不同类型的值返回相同的结果?否。可能我在您尝试的操作中遗漏了一些细微差别。您需要设置并行函数并对其进行测试,包括值和速度。