Numpy:当这些值是步长间隔时如何直接从值分配子数组

Numpy : How to assign directly a subarray from values when these values are step spaced

我有 2 个全局数组“tab1”和“tab2”,其维度分别等于 21x2117x17

我想将“tab1”(由 [15:20,0:7] 索引)的块分配给由 [7:17:2,0:7] 索引的“tab2”块(因此第一个数组维度的元素之间的一个步骤):我试过这个语法:

tab1[15:20,0:7] = tab2[7:17:2,0:7]

不幸的是,这不起作用,似乎只有"diagonal"(我的意思是一个接一个)15:20的元素被考虑在“tab2的值之后" 沿 [7:17:2].

有没有办法将“tab1”的子数组与另一个由具有步长间隔值的索引组成的子数组“tab2”分配?

如果有人能看出问题所在或提出其他方法,那就太好了。

UPDATE 1: 确实,从我上次的测试来看,它看起来不错,但是对于块 [15:20,15:20] 的分配也是一样的吗:

tab1[15:20,15:20] = tab2[7:17:2,7:17:2]  

??

回答:这个块分配似乎也可以,抱歉

作业如我所料。

In [1]: arr = np.ones((20,10),int)                                                             

两个方块的形状相同:

In [2]: arr[15:20, 0:7].shape                                                                  
Out[2]: (5, 7)
In [3]: arr[7:17:2, 0:7].shape                                                                 
Out[3]: (5, 7)

并分配一些有趣的东西,看起来不错:

In [4]: arr2 = np.arange(200).reshape(20,10)                                                   
In [5]: arr[15:20, 0:7] = arr2[7:17:2, 0:7]                                                    
In [6]: arr                                                                                    
Out[6]: 
array([[  1,   1,   1,   1,   1,   1,   1,   1,   1,   1],        
        ...
       [  1,   1,   1,   1,   1,   1,   1,   1,   1,   1],
       [ 70,  71,  72,  73,  74,  75,  76,   1,   1,   1],
       [ 90,  91,  92,  93,  94,  95,  96,   1,   1,   1],
       [110, 111, 112, 113, 114, 115, 116,   1,   1,   1],
       [130, 131, 132, 133, 134, 135, 136,   1,   1,   1],
       [150, 151, 152, 153, 154, 155, 156,   1,   1,   1]])

我看到 arr2 中的 (5,7) 个值块,跳过 [80, 100,...]

等行