数组1*255*80*80转数组1*3*85*80*80
时间: 2023-11-07 09:59:25 浏览: 29
这个转换需要先将数组的维度进行调整,然后将其中的数据进行重新排列。具体步骤如下:
1. 将数组的第二个和第三个维度进行合并,得到一个新的维度为255*6400的数组。
2. 将新数组的每一行按照80个一组进行分割,得到255*80*80的数组。
3. 将原数组的第一个维度拆分为3个维度,即将原数组转换为3*255*80*80的形式。
4. 对于每个通道,将第二个和第三个维度进行合并,得到一个新的维度为255*6400的数组。
5. 将新数组的每一行按照85个一组进行分割,得到255*3*85*80的数组。
6. 将新数组的第二个维度和原数组的第一个维度进行交换,得到3*255*85*80的数组,即为最终结果。
代码实现如下:
```python
import numpy as np
# 原数组
arr1 = np.random.rand(1, 255, 80, 80)
# 将第2和第3维度合并
arr2 = arr1.reshape(1, 255, -1)
# 每80个一组分割
arr3 = np.split(arr2, 80, axis=2)
arr3 = np.concatenate(arr3, axis=1)
# 拆分第1个维度
arr4 = np.split(arr3, 3, axis=1)
# 对于每个通道,将第2和第3维度合并
arr5 = []
for i in range(3):
tmp = arr4[i].reshape(255, -1)
arr5.append(tmp)
# 每85个一组分割
arr6 = []
for i in range(3):
tmp = np.split(arr5[i], 85, axis=1)
tmp = np.concatenate(tmp, axis=0)
arr6.append(tmp)
# 交换维度
arr7 = np.stack(arr6, axis=0)
arr8 = np.swapaxes(arr7, 0, 1)
print(arr8.shape) # (3, 255, 85, 80)
```