Создать матрицу со случайными числами, когда требуемая форма получена из других переменных - PullRequest
1 голос
/ 20 октября 2019

Я хочу создать матрицу со случайными числами на языке программирования J, когда требуемая форма получена из других переменных.

Я мог бы создать такую ​​матрицу с помощью ? 3 5 $ 0, если бы я указывал ее форму, используя целые литералы,Но я изо всех сил пытаюсь найти способ создать такую ​​матрицу, когда форма # y и # x вместо 3 и 5, показанных в приведенном выше примере.

Я пробовал ? 0 $~ # y, # x, и это несработало.

Я думаю, мне нужен какой-то способ применить # к списку переменных и вернуть список чисел, который должен быть помещен после $~, что-то вроде map функциональности других языков. Есть ли способ сделать это?

1 Ответ

4 голосов
/ 20 октября 2019

Я думаю, что ?@:$ - это то, что вы ищете

   3 5 ?@:$ 0
0.031974   0.272734    0.792653   0.439747  0.136448
0.332198   0.00904103  0.7896     0.78304   0.682833
0.27289    0.855249    0.0922516  0.185466  0.257876

Общая структура для этого x u@:v y <-> (u (x v y)), где u и v - глаголы, а аргументы - x и y.

Надеюсь, это поможет.

Перечитывая ваш вопрос, похоже, что вы хотите, чтобы форма основывалась на количестве элементов в аргументах. Здесь я бы использовал # для подсчета элементов в каждом аргументе, затем использовал ,, чтобы создать левый аргумент для $&0 и применить ? к результату.

   3 4 5  (?@:($&0 @:,))&#  5 3 3 4 5
0.179395  0.456545  0.805514  0.471521  0.0967092
0.942029  0.30713   0.228288  0.693909  0.338689
0.632752  0.618275  0.100224  0.959804  0.517927

Это ближе к тому, что вы имели в виду?

И, как часто случалось, я думал о другом подходе в одночасье

   3 4 5 ?@0:"0/ 1 2 3 4 5
 0.271366   0.291846  0.0493541  0.72488   0.47988
 0.50287    0.980205  0.58541    0.778901  0.0755205
 0.0114588  0.523955  0.535905   0.5333    0.984908
...