如何在np 3d数组中重塑帧数据?

时间:2018-09-27 05:09:17

标签: python numpy

我在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]]]

3 个答案:

答案 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)