Numpy:当这些值是步长间隔时如何直接从值分配子数组
Numpy : How to assign directly a subarray from values when these values are step spaced
我有 2 个全局数组“tab1
”和“tab2
”,其维度分别等于 21x21
和 17x17
。
我想将“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,...]
等行
我有 2 个全局数组“tab1
”和“tab2
”,其维度分别等于 21x21
和 17x17
。
我想将“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,...]