import numpy as np
PATH = r"C:\\Users\\onede\\OneDrive\\바탕 화면\\바탕화면에 있던 것\\hyeongwon\\1st\\amass_test\\###.npz"
def inspect_npz(path: str):
print(f"\\n{'='*60}")
print(f" NPZ Inspector: {path}")
print(f"{'='*60}")
data = np.load(path, allow_pickle=True)
keys = list(data.keys())
print(f"\\n[키 목록] 총 {len(keys)}개: {keys}\\n")
for k in keys:
v = data[k]
if v.dtype == object:
inner = v.item() if v.ndim == 0 else v
print(f"[{k}]")
print(f" dtype : object (dict or nested)")
if isinstance(inner, dict):
print(f" 내부 키: {list(inner.keys())}")
else:
print(f" sample : {str(inner)[:80]}")
print()
continue
print(f"[{k}]")
print(f" shape : {v.shape}")
print(f" dtype : {v.dtype}")
if np.issubdtype(v.dtype, np.floating) or np.issubdtype(v.dtype, np.integer):
print(f" range : [{v.min():.4f}, {v.max():.4f}]")
print(f" mean : {v.mean():.4f} std: {v.std():.4f}")
print(f" sample : {v.flat[:6].tolist()}")
last = v.shape[-1] if v.ndim >= 1 else None
hint = guess_rotation(v, last)
if hint:
print(f" [추론] : {hint}")
print()
def guess_rotation(v, last_dim):
hints = []
if last_dim == 3:
if abs(v.min()) <= 3.2 and abs(v.max()) <= 3.2:
hints.append("axis-angle 또는 euler (범위가 -π~π 근처)")
else:
hints.append("3D position/translation 가능성 높음")
elif last_dim == 4:
try:
flat = v.reshape(-1, 4).astype(np.float64)
norms = np.linalg.norm(flat, axis=-1)
if 0.98 < norms.mean() < 1.02:
hints.append(f"quaternion (norm≈{norms.mean():.3f}) — (w,x,y,z) 또는 (x,y,z,w) 확인 필요")
else:
hints.append(f"4-dim 벡터 (norm={norms.mean():.3f}, quaternion 아닐 수 있음)")
except Exception:
pass
elif last_dim == 6:
hints.append("6D rotation 표현 가능성 높음 (Zhou et al. 2019)")
elif last_dim == 9:
hints.append("rotation matrix (3×3 flattened) 가능성")
elif v.ndim >= 3 and v.shape[-2:] == (3, 3):
try:
flat = v.reshape(-1, 3, 3).astype(np.float64)
dets = np.linalg.det(flat)
hints.append(f"rotation matrix 3×3 (det≈{dets.mean():.3f})")
except Exception:
pass
if last_dim == 3 and v.ndim >= 2 and v.shape[-2] > 10:
col_means = np.abs(v.reshape(-1, 3)).mean(axis=0)
up_axis = int(np.argmax(col_means))
axis_name = ['X', 'Y', 'Z'][up_axis]
hints.append(f"값 분산 기준 우세 축: {axis_name} (Y-up=1, Z-up=2 참고)")
return " / ".join(hints) if hints else None
inspect_npz(PATH)