我有一个8x8的数组,分为2x2个块,所以我有16个子数组。这4个维度是(4,4,2,2):第一个是块的行,第二个是块的列,第三个是子数组2x2的行索引,第四个是子数组2x2的列索引。你知道吗
全局数组的前2行是(2行8列):
[3.28542331e+09 3.28542331e+09 0. 0. 0. 0. 0. 0]
[0. 0. 2.60113771e+10 2.60113771e+10 5.12629421e+10 5.12629421e+10 8.49990653e+10 8.49990653e+10]
我尝试从所有2x2块(总共16块)中获取8x8全局数组;我做到了:
arrayFullCross.swapaxes(0,2).reshape(8,8)
但这不管用。确实,第一行是正确的,但第二行不是。我得到的是:
reshape = [[3.28542331e+09 3.28542331e+09 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 2.60113771e+10 2.60113771e+10
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
...
如您所见,值5.12629421e+10 5.12629421e+10
和8.49990653e+10 8.49990653e+10
不会出现在第二行。你知道吗
它们出现在第三行:
[0.00000000e+00 0.00000000e+00 5.12629421e+10 5.12629421e+10
1.01028455e+11 1.01028455e+11 0.00000000e+00 0.00000000e+00]
相反,我想进入第二行:
[[3.28542331e+09 3.28542331e+09 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 2.60113771e+10 2.60113771e+10
5.12629421e+10 5.12629421e+10 8.49990653e+10 8.49990653e+10]
如果有人能帮我从4D阵列建立一个2d8x8阵列。。。你知道吗
编辑1:在完整4D数组的打印下面(通过执行print 'arrayFullCross = ', arrayFullCross
):
arrayFullCross = [[[[3.28542331e+09 3.28542331e+09]
[8.97951610e+07 8.97951610e+07]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]]
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[2.60113771e+10 2.60113771e+10]
[7.10926896e+08 7.10926896e+08]]
[[5.12629421e+10 5.12629421e+10]
[1.40108708e+09 1.40108708e+09]]
[[8.49990653e+10 8.49990653e+10]
[2.32314196e+09 2.32314196e+09]]]
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[1.01028455e+11 1.01028455e+11]
[2.76124733e+09 2.76124733e+09]]
[[1.67515243e+11 1.67515243e+11]
[4.57842318e+09 4.57842318e+09]]]
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[1.38878482e+11 1.38878482e+11]
[3.79574089e+09 3.79574089e+09]]]]
编辑2好的,我要检查重塑是否完成得很好的方法是:
print 'shape(arrayFull = ', np.shape(arrayFullCross)
print 'here first line , arrayFullCross column = 0 = ', arrayFullCross[0][0][0][0:2]
print 'here first line , arrayFullCross column = 1 = ', arrayFullCross[0][1][0][0:2]
print 'here first line , arrayFullCross column = 2 = ', arrayFullCross[0][2][0][0:2]
print 'here first line , arrayFullCross column = 3 = ', arrayFullCross[0][3][0][0:2]
print ' '
print 'here second line , arrayFullCross column = 0 = ', arrayFullCross[1][0][0][0:2]
print 'here second line , arrayFullCross column = 1 = ', arrayFullCross[1][1][0][0:2]
print 'here second line , arrayFullCross column = 2 = ', arrayFullCross[1][2][0][0:2]
print 'here second line , arrayFullCross column = 3 = ', arrayFullCross[1][3][0][0:2]
print ' '
print 'test all first line , arrayFullCross column = 0,1,2,3 = ', arrayFullCross[0][0:4][0][0:2]
print ' '
print 'here first line , arrayFullCross column = 1 = ', arrayFullCross[0][1][0][0:2]
print 'here first line , arrayFullCross column = 2 = ', arrayFullCross[0][2][0][0:2]
print 'here first line , arrayFullCross column = 3 = ', arrayFullCross[0][3][0][0:2]
它给出:
shape(arrayFull = (4, 4, 2, 2)
here first line , arrayFullCross column = 0 = [3.28542331e+09 3.28542331e+09]
here first line , arrayFullCross column = 1 = [0. 0.]
here first line , arrayFullCross column = 2 = [0. 0.]
here first line , arrayFullCross column = 3 = [0. 0.]
here second line , arrayFullCross column = 0 = [0. 0.]
here second line , arrayFullCross column = 1 = [2.60113771e+10 2.60113771e+10]
here second line , arrayFullCross column = 2 = [5.12629421e+10 5.12629421e+10]
here second line , arrayFullCross column = 3 = [8.49990653e+10 8.49990653e+10]
但是我对沿着列索引(在arrayFullCross[i][j][k][l]
中的第二个index j
)打印第一行的方式有疑问。你知道吗
不幸的是,print 'reshape = ', arrayFullCross.swapaxes(2,0).reshape(8,8)
的几乎解给出:
reshape = [[3.28542331e+09 3.28542331e+09 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 2.60113771e+10 2.60113771e+10
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 5.12629421e+10 5.12629421e+10
1.01028455e+11 1.01028455e+11 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 8.49990653e+10 8.49990653e+10
1.67515243e+11 1.67515243e+11 1.38878482e+11 1.38878482e+11]
[8.97951610e+07 8.97951610e+07 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 7.10926896e+08 7.10926896e+08
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 1.40108708e+09 1.40108708e+09
2.76124733e+09 2.76124733e+09 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 2.32314196e+09 2.32314196e+09
4.57842318e+09 4.57842318e+09 3.79574089e+09 3.79574089e+09]]
根据我的打印,第二行应该等于:
[0.00000000e+00 0.00000000e+00 2.60113771e+10 2.60113771e+10
5.12629421e+10 5.12629421e+10 8.49990653e+10 8.49990653e+10]
可以多次使用交换盘吗?你知道吗
敬礼
我想我的评论还不够清楚。你知道吗
是的,这可以被重塑为(8,8),但肯定会有某种换位,因为一对维度是(2,4),另一对维度是(4,2)。你知道吗
如果您交换了轴以产生(2,4,2,4)或(4,2,4,2),我希望重塑将是正确的。你知道吗
哪个swap是正确的具体细节取决于您想要如何排列子块。希望你能追踪到?你知道吗
用漂亮的(2,2)块做一个简单的数组:
看看不同的掉期产生了什么:
起作用的产生(4,2,4,2)形状:
还有另一个交换
相关问题 更多 >
编程相关推荐