SciPy Sparse Data
داده اسپارس چیست؟
داده اسپارس (sparse data) دادهای است که بیشتر عناصر آن بدون استفاده هستند (عناصری که هیچ اطلاعاتی با خود حمل نمیکنند). داده اسپارس میتواند آرایهای شبیه به آرایه زیر باشد.
[1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0]
- داده اسپارس: مجموعهای از دادهها که بیشتر مقادیر آن برابر صفر باشد.
- آرایه چگال: آرایه چگال یا Dense Array در تضاد با آرایه اسپارس، آرایهای است که بیشتر مقادیر آن غیر صفر باشد.
در محاسبات علمی، هنگامیکه با مشتقات جزئی (partial derivatives) سر و کار داریم، به دادههای اسپارس برخورد میکنیم.
نحوه کار کردن با دادههای اسپارس
SciPy مدولی به اسم scipy.sparse
دارد که توابعی را جهت کار با دادههای اسپارس فراهم میکند.
در اصل دو نوع ماتریس اسپارس وجود دارد که با آنها سر و کار خواهیم داشت:
- CSC یا Compressed Sparse Columns جهت برش دادن ستونی سریع و انجام اعمال اصلی به صورت بهینه.
- CSR یا Compressed Sparse Rows جهت برش دادن سطری سریع و انجام ضرب برداری به صورت سریعتر.
در این آموزش با CSR کار میکنیم.
در کد زیر از یک آرایه تعریف شده یک ماتریس اسپارس سطری ایجاد میکنیم.
با توجه به خروجی، متوجه میشویم که تنها 3 مقدار غیر صفر وجود دارد:
- مقدار اول در سطر
0
و مکان5
با مقدار1
قرار دارد. - مقدار دوم در سطر
0
و مکان6
با مقدار1
قرار دارد. - مقدار سوم در سطر
0
و مکان8
با مقدار2
قرار دارد.
توابع شیء ماتریس اسپارس
با استفاده از خصوصیت data
میتوانیم دادههای ذخیره شده (دادههایی که صفر نیستند) را مشاهده کنیم.
تابع شیء count_nonzero()
غیر صفرها را میشمارد.
با استفاده از تابع شیء eliminate_zeros()
میتوان عناصری که مقدار آنها برابر صفر است را حذف کرد.
تابع شیء tocsc()
ماتریس csr
را به ماتریس csc
تبدیل میکند.