我在3d数组中有数据,例如:
destutter
class BookInline(admin.StackedInline):
model = Book
extra = 1
max_num = 1
我想把它变成这样:
[[[ 41 57 64 255]
[ 57 76 79 255]
[ 92 113 115 255]
...
[ 70 89 80 255]
[106 127 118 255]
[140 161 152 255]]]
array.shape = (360, 640, 4)
这两个数据集是从两个不同的相机中取出的。 我可以重塑数组吗?重塑后,框架会正确显示吗?
我尝试使用np.reshape()并转换为列表并弹出,但是列表方法很慢并且无法正确显示
np.reshape
[[[120 125 110]
[120 125 110]
[120 126 109]
...
[192 207 189]
[194 207 189]
[195 208 190]]]
答案 0 :(得分:0)
第一个图像似乎是360 x 640 rgba图像,第二个图像似乎是480 x 640 rgb图像。因此,您可以做的是用零填充第一个元素,并删除其第3维的最后一个元素。
import numpy as np
array1 = np.arange(360*640*4).reshape((360, 640, 4)) # example
array2 = np.arange(480*640*3).reshape((480, 640, 3)) # example
zeros = np.zeros(array2.shape, dtype=np.int32)
zeros[60:-60,:,:] = array1[:,:,:-1]
modified_array1 = zeros
print modified_array1.shape, array2.shape
产生:
(480, 640, 3) (480, 640, 3)
答案 1 :(得分:0)
由于两种情况下元素总数的不同,您会收到错误消息:
360*640*3=691200
480*640* 3=921600
只有在前一个和重整的数组中的元素数相同时,Numpy重整才有效。
如果需要,您可以尝试填充0。
答案 2 :(得分:0)
我以这个示例为例,它对我有用。
import numpy as np
x = np.zeros((360,640,4))
print(x.shape)
print(x)
y = x.reshape(480,640,3)
print(y)
print(y.shape)