Я бы начал с того, что заметил, что v2 u/ v2
составляет таблицу из элементов v2
, применяя u
между этими элементами.Кроме того, вы можете немного упростить это, используя u/~ v2
, что совпадает с v2 u/ v2
.Следующий вопрос - что такое u
, но перед тем, как мы пойдем туда, бокс действительно замедляет ход событий, и вам на самом деле не нужно помещать вектор в коробку, чтобы это работало, поскольку элементы уже можно записать так:
[ v2=: 5 2 $ 4 0 4 5 5 7 8 3 6 0
4 0
4 5
5 7
8 3
6 0
и это делает элементы векторами, что вы хотите использовать u/~ v2
Теперь вернемся к вопросу о том, что мы хотим u
.Мы собираемся работать над элементами v2
Так как u
подается в элементы v2
для создания таблицы, вы хотите вычесть элементы друг из друга как векторы (ранг 1), а затем возвести в квадратих, а затем сложите их вместе.Если перевести это в J, вы получите +/@:*:@:-"1
как u
+/@:*:@:-"1/~ v2
0 25 50 25 4
25 0 5 20 29
50 5 0 25 50
25 20 25 0 13
4 29 50 13 0
Если вы рассчитываете это время, я надеюсь, что вы найдете его намного быстрее, чем ваше решение, потому что оно не требует бокса.Ключевой областью, которая вас беспокоила в отношении ранга, было его применение после наречий таблицы /
Надеюсь, что это поможет, хотя это немного другой подход, и дайте мне знать, как выглядит ваше время.