loglens-learnability / code /compute_R.py
resoajoe's picture
Upload folder using huggingface_hub
021d920 verified
Raw
History Blame Contribute Delete
1.23 kB
"""Compute the learnability ratio R for a config on the local bank.
Usage: python compute_R.py <static|moving> <size_px> [contrast]"""
import sys, numpy as np, cv2
mode,size=sys.argv[1],int(sys.argv[2]); ct=float(sys.argv[3]) if len(sys.argv)>3 else 1.0
B=np.load("simreal/frames64.npy").astype(np.float32)/255.0
rng=np.random.default_rng(0)
def pool(img): return cv2.resize(img,(8,8),interpolation=cv2.INTER_AREA).ravel()
def draw(img,pos,c):
img=img.copy();x,y=pos
img[y:y+size,x:x+size]=c*ct+img[y:y+size,x:x+size].mean(axis=(0,1))*(1-ct); return img
sig=[];den=[]
for _ in range(80):
if mode=="static": frames=[B[rng.integers(len(B))]]*9
else: frames=[B[rng.integers(len(B))] for _ in range(9)]
pos=(int(rng.integers(2,60-size)),int(rng.integers(2,60-size)))
c=rng.uniform(0.15,0.95,3).astype(np.float32)
sig.append(np.sum((pool(draw(frames[0],pos,c))-pool(draw(frames[0],pos,1-c)))**2)/4)
P=np.array([pool(f) for f in frames])
probes=[pool(np.roll(np.roll(frames[0],int(rng.integers(64)),0),int(rng.integers(64)),1)) for _ in range(6)]
den.append(P.var(axis=0).sum()+np.array(probes).var(axis=0).sum())
print(f"R({mode},{size}px,ct={ct}) = {np.mean(sig)/(np.mean(den)+1e-9):.4f}")