یک تانسور ماتریس دستهای را با مقادیر مورب دستهای جدید برمیگرداند.
با توجه به «ورودی» و «مورب»، این عملیات تانسوری را با همان شکل و مقادیر «ورودی» برمیگرداند، به جز قطرهای مشخصشده درونیترین ماتریسها. اینها با مقادیر «مورب» بازنویسی خواهند شد.
«ورودی» دارای ابعاد «r+1» است «[I، J، ...، L، M، N]». وقتی «k» اسکالر یا «k[0] == k[1]» است، «مورب» دارای ابعاد «r» است «[I، J، ...، L، max_diag_len]». در غیر این صورت، دارای ابعاد «r+1» «[I، J، ...، L، num_diags، max_diag_len]» است. "num_diags" تعداد قطرها است، "num_diags = k[1] - k[0] + 1". «max_diag_len» طولانیترین مورب در محدوده «[k[0]، k[1]]»، «max_diag_len = min(M + min(k[1], 0)، N + min(-k[0]) است. , 0))`
خروجی یک تانسور رتبه «k+1» با ابعاد «[I، J، ...، L، M، N]» است. اگر `k` اسکالر است و یا` K [0] == K [1] `:
output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, n-max(k[1], 0)] ; if n - m == k[1]
input[i, j, ..., l, m, n] ; otherwise
غیر این صورت، output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] <= d <= k[1]
input[i, j, ..., l, m, n] ; otherwise
که در آن` د = N - m`، `diag_index = K [1] - d` و` index_in_diag = n - max(d, 0) + offset`."offset" صفر است مگر زمانی که تراز مورب به سمت راست باشد.
offset = max_diag_len - diag_len(d) ; if (`align` in {RIGHT_LEFT, RIGHT_RIGHT
and `d >= 0`) or
(`align` in {LEFT_RIGHT, RIGHT_RIGHT}
and `d <= 0`)
0 ; otherwise
}
که در آن `diag_len (D) = MIN (گذرگاه - حداکثر (د، 0)، ردیف + دقیقه (د، 0))`.به عنوان مثال:
# The main diagonal.
input = np.array([[[7, 7, 7, 7], # Input shape: (2, 3, 4)
[7, 7, 7, 7],
[7, 7, 7, 7]],
[[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7]]])
diagonal = np.array([[1, 2, 3], # Diagonal shape: (2, 3)
[4, 5, 6]])
tf.matrix_set_diag(input, diagonal)
==> [[[1, 7, 7, 7], # Output shape: (2, 3, 4)
[7, 2, 7, 7],
[7, 7, 3, 7]],
[[4, 7, 7, 7],
[7, 5, 7, 7],
[7, 7, 6, 7]]]
# A superdiagonal (per batch).
tf.matrix_set_diag(input, diagonal, k = 1)
==> [[[7, 1, 7, 7], # Output shape: (2, 3, 4)
[7, 7, 2, 7],
[7, 7, 7, 3]],
[[7, 4, 7, 7],
[7, 7, 5, 7],
[7, 7, 7, 6]]]
# A band of diagonals.
diagonals = np.array([[[0, 9, 1], # Diagonal shape: (2, 4, 3)
[6, 5, 8],
[1, 2, 3],
[4, 5, 0]],
[[0, 1, 2],
[5, 6, 4],
[6, 1, 2],
[3, 4, 0]]])
tf.matrix_set_diag(input, diagonals, k = (-1, 2))
==> [[[1, 6, 9, 7], # Output shape: (2, 3, 4)
[4, 2, 5, 1],
[7, 5, 3, 8]],
[[6, 5, 1, 7],
[3, 1, 6, 2],
[7, 4, 2, 4]]]
# LEFT_RIGHT alignment.
diagonals = np.array([[[9, 1, 0], # Diagonal shape: (2, 4, 3)
[6, 5, 8],
[1, 2, 3],
[0, 4, 5]],
[[1, 2, 0],
[5, 6, 4],
[6, 1, 2],
[0, 3, 4]]])
tf.matrix_set_diag(input, diagonals, k = (-1, 2), align="LEFT_RIGHT")
==> [[[1, 6, 9, 7], # Output shape: (2, 3, 4)
[4, 2, 5, 1],
[7, 5, 3, 8]],
[[6, 5, 1, 7],
[3, 1, 6, 2],
[7, 4, 2, 4]]]
کلاس های تو در تو
کلاس | MatrixSetDiagV3.Options | ویژگی اختیاری برای MatrixSetDiagV3 |
روش های عمومی
شخص MatrixSetDiagV3.Options | چین (چین رشته) |
خروجی <T> | asOutput () دسته نمادین یک تانسور را برمیگرداند. |
شخص <T> MatrixSetDiagV3 <T> | |
خروجی <T> | خروجی () رتبه «r+1»، با «output.shape = input.shape». |
روش های ارثی
روش های عمومی
عمومی استاتیک MatrixSetDiagV3.Options چین (چین رشته)
مولفه های
تراز کردن | برخی از موربها کوتاهتر از «max_diag_len» هستند و باید به آنها اضافه شوند. "align" رشته ای است که مشخص می کند به ترتیب چگونه ابر قطرها و زیر قطرها باید تراز شوند. چهار تراز احتمالی وجود دارد: «RIGHT_LEFT» (پیشفرض)، «LEFT_RIGHT»، «LEFT_LEFT» و «RIGHT_RIGHT». "RIGHT_LEFT" ابرمورب ها را به سمت راست تراز می کند (ردیف را به سمت چپ قرار می دهد) و قطرهای فرعی را در سمت چپ (راست روی ردیف قرار می دهد). این فرمت بسته بندی است که LAPACK از آن استفاده می کند. cuSPARSE از "LEFT_RIGHT" استفاده می کند که تراز مخالف است. |
---|
عمومی خروجی <T> asOutput ()
دسته نمادین یک تانسور را برمیگرداند.
ورودی های عملیات TensorFlow خروجی های عملیات تنسورفلو دیگر هستند. این روش برای به دست آوردن یک دسته نمادین که نشان دهنده محاسبه ورودی است استفاده می شود.
عمومی استاتیک MatrixSetDiagV3 <T> ایجاد ( محدوده دامنه، عملوند <T> ورودی، عملوند <T> مورب، عملوند <صحیح> K، گزینه ها ... گزینه ها)
روش کارخانه برای ایجاد کلاسی که یک عملیات جدید MatrixSetDiagV3 را بسته بندی می کند.
مولفه های
محدوده | محدوده فعلی |
---|---|
ورودی | رتبه `r+1`، جایی که `r >= 1`. |
مورب | هنگامی که «k» یک عدد صحیح است یا «k[0] == k[1]»، «r» را رتبه بندی کنید. در غیر این صورت دارای رتبه r+1 می باشد. `k>= 1`. |
ک | افست (های) مورب. مقدار مثبت به معنای ابر قطری، 0 به قطر اصلی و مقدار منفی به معنای قطرهای فرعی است. `k` می تواند یک عدد صحیح منفرد (برای یک مورب) یا یک جفت اعداد صحیح باشد که انتهای پایین و بالای یک باند ماتریس را مشخص می کند. «k[0]» نباید بزرگتر از «k[1]» باشد. |
گزینه ها | مقادیر ویژگی های اختیاری را حمل می کند |
برمی گرداند
- یک نمونه جدید از MatrixSetDiagV3