我有一个数组:
[0 1 2 3 4 5 6 7 8 ....] #2560 positions
我正在尝试将此 1D 数组 reshape 为 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]]
