[英]Reshape 1d array to 3d array numpy
我有一個數組為:
[0 1 2 3 4 5 6 7 8 ....] #2560 positions
我正在嘗試將此1D數組重塑為3D,如下所示:
A = np.arange(2560) #generating example data
B = np.reshape(A,(16,16,10)) # here, i's expect to be 16 rows 16 x columns x 10 "frames"
C = B[:,:,0]
但是,結果是這樣的
C = [[0, 10, 20, 30, .., 150]
[160, 170, 180, ..., 310]
...
[2510,...2550]
正確的是
print(B[:,:,0])
[[0, 1, 2, 3, .., 15]
[16, 17, 18, ..., 31]
...
[240,241,..., 255]
print(B[:,:,1])
[[256, 257, , .., 271]
...
[496,497,..., 511]
我做錯了什么?
想法是不使用for以便更快
我認為您不了解數據的結構。
它是一個3D矩陣。
首先,您有16行 ,每行包含16列 ,每列包含10個列表
但是,行和列不包含任何數字,行包含列,列包含列表。 僅列表包含數字。
因此,當執行: print(B[:,:,0])
,您會問:“我希望列表的第一個數字包含在每一行的每一列中”。 因此,您可以准確地獲取所需的信息。
您無法獲得此:
print(B[:,:,0])
[[0, 1, 2, 3, .., 15]
[16, 17, 18, ..., 31]
...
[240,241,..., 255]
print(B[:,:,1])
[[256, 257, , .., 271]
...
[496,497,..., 511]
這不是數據的存儲方式,您必須操縱數據以使其以這種方式顯示。
您可以執行以下操作:
A = np.arange(2560)
B = np.reshape(A,(10,16,16))
print(B[0,:,:])
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]
[ 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47]
[ 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63]
[ 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
[ 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95]
[ 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111]
[112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127]
[128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143]
[144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159]
[160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175]
[176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191]
[192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207]
[208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223]
[224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239]
[240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255]]
正如您發現自己一樣,僅重塑形狀並不能提供所需的格式。 為了解決這個問題,我們需要進行不同的重塑,然后對軸進行置換。 這里可以遵循一般理論- Reshape and permute axes
。 解決方案是-
A.reshape(-1,16,16).transpose(1,2,0)
樣品運行-
In [465]: A = np.arange(2560)
In [466]: B = A.reshape(-1,16,16).transpose(1,2,0)
In [467]: B[:,:,0]
Out[467]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15],
[ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31] ...
In [468]: B[:,:,1]
Out[468]:
array([[256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
269, 270, 271],
[272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 287]...
我們還可以使用np.moveaxis
進行排列-
np.moveaxis(A.reshape(-1,16,16), 0, -1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.