【问题标题】:Numpy vectorized and unvectorized code results not matching for 3d arrayNumpy 向量化和非向量化代码结果与 3d 数组不匹配
【发布时间】:2021-12-07 22:32:07
【问题描述】:

我正在尝试将 numpy 3d 数组的程序代码重构为其矢量化等效项,但结果不匹配。

import numpy as np 
              
arr = np.empty((16,73,144))

boolArray = np.zeros((14,73,144)) 

for k in range(0,16): 
   for j in range(0,73): 
      for i in range(0,144): 
        if (k == 0):
            doSomething():
        else if (k == 15):
             doSomething():
        else:
         if (arr[k+1,j,i] == arr[k-1,j,i]): 
              boolArray[k,j,i] = True

矢量化对应物 -

# isArrEqual is a boolean array of identical shape to boolArray 
isArrEqual = (arr[2:,:,:] == arr[0:-2,:,:])

在我的真实数据中,我得到了 6000 个程序代码的真实条目,而在矢量化对应物中则完全没有。

我哪里出错了?

【问题讨论】:

  • arr = np.empty(16,73,144) 应该是 arr = np.empty((16,73,144))boolArray 相同
  • @Corralien 已编辑。感谢您指出错误。

标签: python arrays numpy vectorization


【解决方案1】:

您的程序代码可能有错误。 我认为应该是

for k in range(1, 15):  # changed 14 to 15 
   for j in range(0,73): 
      for i in range(0,144): 
         if (arr[k+1,j,i] == arr[k-1,j,i]): 
              boolArray[k-1,j,i] = True  # changed k to k-1

我在 numpy 代码中看不到任何问题。

【讨论】:

  • 我可以根据您的回答对问题进行编辑吗?
  • 但这不能解决你的问题吗?
  • 不,它没有。那么我可以进行编辑吗?
  • 是的。请准确使用数组中的数据类型
  • @gansub,您的程序代码仍有问题。 (IndexError for k = 14 + 语法错误,+ 你没有在最后一行将 k 更改为 k - 1
猜你喜欢
  • 2019-09-11
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多