用J中的几个子阵列组成矩阵

时间:2017-08-12 20:42:44

标签: arrays j

我想在4个给定的较小的子矩阵中组成一个名为 F 的12x12矩阵,该子矩阵应位于不同的位置:

  • 形状3x6的阵列A应该是从(0; 0)到(2; 5)
  • 形状4x9的阵列B应该是从(3; 3)到(6; 11)
  • 形状3x3的阵列C应该是从(7; 0)到(9; 2)
  • 形状2x3的阵列D应该是从(10; 6)到(11; 8)

所有其他原子都是零。我开始设置 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

2 个答案:

答案 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