我想在4个给定的较小的子矩阵中组成一个名为 F 的12x12矩阵,该子矩阵应位于不同的位置:
所有其他原子都是零。我开始设置 def metric_fn(labels, predict):
SST, update_op1 = tf.metrics.mean_squared_error(labels, tf.reduce_mean(labels))
SSE, update_op2 = tf.metrics.mean_squared_error(labels, predictions )
return tf.subtract(1.0, tf.div(SSE, SST)), tf.group(update_op1, update_op2))
但未能尝试amend动词。对此最好的做法是什么?
我的子阵列是:
F =: 12 12 $ 0
答案 0 :(得分:4)
从每个数组的形状中创建一个坐标列表。
c_D =: {@(;&i.)/ $ D
┌───┬───┬───┐
│0 0│0 1│0 2│
├───┼───┼───┤
│1 0│1 1│1 2│
└───┴───┴───┘
将偏移量添加到上面的坐标
c_D =: (<10 6) + &.> c_D
现在使用修正:
D c_D } F
你可以形成一个动名词来简化这个过程,类似于:
g =: 3 : '({.y) +&.> {@(;&i.)/$ >{:y'
m =: ((>@{:@[)`(g@[)`])
((0 0);A) m} F
((3 3);B) m} F
etc.
答案 1 :(得分:3)
如果组件具有一致的形状,可能会有一些不同的方法,包括填充组件阵列,然后组装12X12阵列。
12{."1. A NB. Pad 0's to the right
_1 1 0 0 0 0 0 0 0 0 0 0
0 0 _1 0 0 1 0 0 0 0 0 0
0 0 0.99 0 _1 0 0 0 0 0 0 0
_12{."1 B NB. Pad 0's to the left
0 0 0 1 0 0 1 0 0 _1 0 0
0 0 0 0 1 0 0 0 0 0 _1 0
0 0 0 0 1 0 0 _1 0 0 0 0
0 0 0 1 0 1 1 0 1 1 0 1
12{."1. C
1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0
_12{."1 [ 6 {."1 D NB. extra {. required to pad both ends
0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0
然后组装最终数组
(12{."1. A) , (_12 {."1 B),(12 {."1 C),_12{."1[ 6 {."1 D
_1 1 0 0 0 0 0 0 0 0 0 0
0 0 _1 0 0 1 0 0 0 0 0 0
0 0 0.99 0 _1 0 0 0 0 0 0 0
0 0 0 1 0 0 1 0 0 _1 0 0
0 0 0 0 1 0 0 0 0 0 _1 0
0 0 0 0 1 0 0 _1 0 0 0 0
0 0 0 1 0 1 1 0 1 1 0 1
1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0