Я ищу, чтобы вставить вычисленные элементы 2D-массива в 3D-массив.Первый цикл for - это количество массивов.например, когда i = 1, значения будут помещены в первый массив трехмерного массива.Вычисленный элемент отображается в нижней строке кода
"dctArray[dctRow][dctColumn]".
По сути, я пытаюсь приравнять значение этого 2D-массива к первому массиву 3D-массива.Так что-то вроде этого:
dctArrayBlocks[i][dctRow][dctColumn] = dctArray[dctRow][dctColumn]
Но это не работает для всего массива.Когда я печатаю отдельное значение
dctArrayBlocks[i][dctRow][dctColumn]
, это правильно, но когда я пытаюсь напечатать полный массив, значения получаются очень неправильными.Эти выходные данные находятся внизу.
Спасибо, и вот полный код:
noBlocksOn1Axis = (int(imageLength/blockSize))
blocksList = []
previousRow = 0
for rowBlock in range(noBlocksOn1Axis):
previousRow = rowBlock * blockSize
previousColumn = 0
for columnBlock in range(noBlocksOn1Axis):
previousColumn = columnBlock * blockSize
block = arrayY[previousRow:previousRow+blockSize,previousColumn:previousColumn+blockSize]
blocksList.append(block)
dctArray = np.zeros((8,8))
dctArrayBlocks = np.zeros(shape = (4,8,8))
for i in range(4):
for dctRow in range(blockSize):
for dctColumn in range (blockSize):
dctSum = 0
for row in range (blockSize):
for column in range (blockSize):
dctSum = dctSum + blocksList[i][row][column]*math.cos(((2.0*row+1)*dctRow*math.pi)/16.0)*math.cos(((2.0*column+1)*dctColumn*math.pi)/16.0)
if(dctRow == 1):
cRow = 1/math.sqrt(2)
else:
cRow = 1
if(dctColumn == 1):
cColumn= 1/math.sqrt(2)
else:
cColumn = 1
dctArray[dctRow][dctColumn] =
1/4.0*cRow*cColumn*dctSum
dctArrayBlocks[i][dctRow][dctColumn] =
dctArray[dctRow][dctColumn]
print(dctArrayBlocks[i][dctRow][dctColumn])
print(dctArrayBlocks)
Вот ожидаемый результат в виде списка
1160.75
2.15309774781
0.230969883128
0.325283736973
-0.883883476483
-0.332410006991
0.0956708580911
-0.370181380455
-29.1901374775
-0.0455109087818
0.543799659533
0.500630540423
-0.469718941578
0.21007762182
0.340311556876
-0.818563547551
-1.97625897152
1.34074300692
0.265165042945
-1.05682448828
0.450332944883
0.750180006989
0.109834957055
-0.46727710967
-2.38227629503
-0.720900476592
0.904589640549
1.02494023825
-0.564894042278
-1.11318780084
-0.318826625164
-0.627633469915
0.883883476483
0.151835185028
0.760559161902
0.114395653893
0.625
0.465174095446
-0.450332944883
0.732747465688
-1.08735713314
-0.336526203213
0.0151562551075
-0.582857714948
-0.652328957388
0.00538984764367
-0.131671763221
0.541152940662
2.15798528204
-0.175494902565
-0.640165042945
-0.631820804478
0.760559161902
0.315865402699
-0.265165042945
0.266936390222
0.373044516988
-0.443563547551
0.319493333954
-0.857754793709
0.355794721991
0.311551890598
-0.111193339081
0.0606917316737
А вотчто я получаю.
[[[ 1.16075000e+03 2.15309775e+00 2.30969883e-01 3.25283737e-01
-8.83883476e-01 -3.32410007e-01 9.56708581e-02 -3.70181380e-01]
[ -2.91901375e+01 -4.55109088e-02 5.43799660e-01 5.00630540e-01
-4.69718942e-01 2.10077622e-01 3.40311557e-01 -8.18563548e-01]
[ -1.97625897e+00 1.34074301e+00 2.65165043e-01 -1.05682449e+00
4.50332945e-01 7.50180007e-01 1.09834957e-01 -4.67277110e-01]
[ -2.38227630e+00 -7.20900477e-01 9.04589641e-01 1.02494024e+00
-5.64894042e-01 -1.11318780e+00 -3.18826625e-01 -6.27633470e-01]
[ 8.83883476e-01 1.51835185e-01 7.60559162e-01 1.14395654e-01
6.25000000e-01 4.65174095e-01 -4.50332945e-01 7.32747466e-01]
[ -1.08735713e+00 -3.36526203e-01 1.51562551e-02 -5.82857715e-01
-6.52328957e-01 5.38984764e-03 -1.31671763e-01 5.41152941e-01]
[ 2.15798528e+00 -1.75494903e-01 -6.40165043e-01 -6.31820804e-01
7.60559162e-01 3.15865403e-01 -2.65165043e-01 2.66936390e-01]
[ 3.73044517e-01 -4.43563548e-01 3.19493334e-01 -8.57754794e-01
3.55794722e-01 3.11551891e-01 -1.11193339e-01 6.06917317e-02]]