我的目标是加载、更改和保存NPZ文件。我正在加载的文件返回5个不同的密钥。其中4个键的类型是np.array,而最后一个键是一个元组列表。下面是其中一个元组的示例:
(array([1967,2929]),0.23312236286919832,array([888.117,387.693,851.922,124.948]))
我在保存npz文件时遇到了麻烦,因为这个元组列表不能转换成numpy数组,而numpy数组是保存NPZ文件所必需的。将列表转换为数组将返回以下错误:
ValueError:使用序列设置数组元素。请求的数组在二维后具有不均匀的形状。检测到的形状为(44601,3)+不均匀部分。
有人知道如何处理这个问题吗?
下面是我的代码:
import numpy as np
from numpy import load
import os
directory = '/MY_PATH/scene_info_0.1_0.7'
for filename in os.listdir(directory):
f_npz = os.path.join(directory,filename)
data = load(f_npz, allow_pickle = True)
print(type(data))
for image_path in data['image_paths']:
if image_path is not None:
if 'Undistorted_SfM' in image_path:
image_path = image_path.replace('Undistorted_SfM', 'phoenix/S6/zl548/MegaDepth_v1')
else:
print("Undistorted_SfM NOT IN IMAGE PATH??")
data['pair_infos'] = np.asarray(data['pair_infos'])
new_file = '/MY_PATH/npz_mess/' + filename
np.savez(new_file, data['image_paths'], data['depth_paths'], data['intrinsics'],data['poses'],data['pair_infos'])
print("Saved to ", new_file)
1条答案
按热度按时间ogsagwnx1#
正如hpaulj在注解中所指出的,您希望在这里指定
object
的dtype,在此之后,您的代码应该可以正常运行。下面的再生器运行干净。