【问题标题】:What happens when using 3 indexes to slice a 4-dimensional array?使用 3 个索引对 4 维数组进行切片时会发生什么?
【发布时间】:2015-04-16 15:51:25
【问题描述】:

我试图理解为什么我的算法的准确性突然发生了巨大的变化。当我发现在标准化我的 4 维训练/测试集时只使用 3 个索引时,我做了一个小的更改,我添加了第四个 :。现在我很好奇 - 下面的旧/新代码会做同样的事情吗?如果不是,那么仅使用 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]

【问题讨论】:

  • 您想知道它为什么变慢或如何加快速度吗? ...因为几乎所有内容都可以在您的代码中进行矢量化,这应该会提高性能...
  • 那太好了!如果您在这里添加答案 stackoverflow.com/questions/29418031/… 会更有意义。
  • 回答你的问题,是的,他们都做同样的事情。您实际上可以省略所有尾随 : 并且仍然会得到相同的结果。

标签: python arrays numpy


【解决方案1】:

我不明白为什么额外的: 会有所作为。当我对一个简单的np.mean(X[:,1]) v np.mean(X,1,:,:] 等进行时间测试时,情况并非如此。

至于plonser's 建议你可以向量化整个事情,关键是意识到meanstd 带了一些附加参数。查看他们的文档并尝试使用示例数组。

Xmean = np.mean(X,axis=(0,2,3),keepdims=True)
X -= Xmean
X /= Xmean

【讨论】:

  • 他将变量命名为X_train。 :) 这只是一个插图。
  • 谢谢。您是否还确定我的旧代码与我的新代码对于 X_train 中的不同类型的值返回相同的结果?
  • 没有。我可能错过了您尝试做的一些细微差别。您需要设置并行函数并对其进行测试——无论是值还是速度。
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多