在2D numpy数组中有效地找到正值的索引范围

Dan*_*wle 5 python arrays numpy multidimensional-array

我有一个大的numpy数组(通常是500,000x1024,但可能更大),我正在尝试执行几个依赖于数组中正值的位置的进程.一个非常小的示例数组可能是

  [[ 0., 0., 0., 0., 0.,-1.,-1., 0., 0.],
   [ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [ 0., 1., 1., 0., 0., 1., 5., 0., 0.],
   [ 0., 1., 1., 0., 0., 0., 1., 0., 0.],
   [ 0., 3., 1., 0., 0., 2., 1., 0., 0.],
   [ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
   [ 0., 1., 0., 0., 0., 1., 1., 0., 0.],
   [ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
Run Code Online (Sandbox Code Playgroud)

第一种是在每行中间隔少于三列的正值之间替换任何零.所以如果我用50替换这些数字,我的示例输出就是

 [[ 0., 0., 0., 0., 0.,-1.,-1., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 1., 1.,50.,50., 1., 5., 0., 0.],
  [ 0., 1., 1., 0., 0., 0., 1., 0., 0.],
  [ 0., 3., 1.,50.,50., 2., 1., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 1., 0., 0., 0., 1., 1., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
Run Code Online (Sandbox Code Playgroud)

我需要做的第二件事是根据正值范围的位置为每一行写出一些信息.例如,使用我改变的数组,我需要能够为col [1:7]声明正整数的第三行写出一个语句,并且在col [1:3]和col中声明第四行的两个语句来声明正整数[6].

我已经设法利用numpy矢量化方法来对抗第一个任务,但仍然最终需要循环遍历列和行(尽管在整个数组的子集上).否则我最终会替换给定行中的所有零而不是正值之间的所有零.

但是第二项任务似乎无法在没有循环使用整个阵列的情况下找到办法

for col in arr:
  for row in arr:
Run Code Online (Sandbox Code Playgroud)

我想我的整体问题是,有没有办法在numpy中使用矢量化方法来定义每个行不同的列索引范围并依赖于下一列中的值?

任何帮助将非常感激.

小智 -1

对于你的第一个问题:创建一个变量来保存你遇到的第一个正数的索引,并有一个 if 语句,如果下一个值为正数,则重置位置,并且 count (计算距离第一个正数的位置的变量)是小于3。

对于第二个问题:创建一个数组并添加正值位置的索引。

 String[] indices = new String[];
 int pos = 0;
 for col in arr:
     for row in arr:
        if(index is positive){
             indices[pos] = "[" + col + ":" + row + "]";
             pos++;
         }
Run Code Online (Sandbox Code Playgroud)