ฉันพยายามที่จะดำเนิการคำนวณบางอย่างแต่ฉันไม่สามารถหาวิธีที่จะ vectorize ของรหัสและไม่ใช่โดยใช้บางอย่าง.
ปล่อยให้ฉันอธิบาย:ฉันมีเมตริกซ์ M[N,C]
ของมือ 0
หรือ 1
. อีเมตริกซ์ Y[N,1]
บรรจุค่าของ [0,C-1]
(ของฉันเรียน). อีเมตริกซ์ ds[N,M]
ซึ่งเป็นวันที่ของฉัน.
ฉันส่งออกเมตริกซ์เป็นของขนาด grad[M,C]
และควรจะถูกคำนวนที่ติดตาม:ฉันจะอธิบายสำหรับ grad[:,0]
เหมือนกันตรรกะสำหรับอื่นวนคอลัมน์
สำหรับแต่ละแถวด้ว(ตัวอย่าง)ใน ds
ถ้า Y[that sample] != 0
(ปัจจุบันคอลัมน์ของการแสดงผลหน้าจอเมตริกซ์ว่าง)และ M[that sample, 0] > 0
แล้ว grad[:,0] += ds[that sample]
ถ้า Y[that sample] == 0
แล้ว grad[:,0] -= (ds[that sample] * <Num of non zeros in M[that sample,:]>
)
นี่คือของฉัน iterative เข้ามา:
for i in range(M.size(dim=1)):
for j in range(ds.size(dim=0)):
if y[j] == i:
grad[:,i] = grad[:,i] - (ds[j,:].T * sum(M[j,:]))
else:
if M[j,i] > 0:
grad[:,i] = grad[:,i] + ds[j,:].T