Непонимание J Tally (#)

В J, чтобы найти количество элементов, вы можете использовать # верно?

e.g.

# 2 3 4 5 6
5

ХОРОШО. Так что насчет многомерного массива

b=: 2 3 4 $ i.2

   b
0 1 0 1
0 1 0 1
0 1 0 1

0 1 0 1
0 1 0 1
0 1 0 1

Здесь #b равно 2. Я думаю, потому что первое измерение имеет длину 2, то есть кадр массива.

Итак, если я немного изменю его:

b=:3 2 4 $ i.2
   b
0 1 0 1
0 1 0 1

0 1 0 1
0 1 0 1

0 1 0 1
0 1 0 1

Это число равно 3, потому что ведущее измерение имеет длину 3, верно?

Но я не могу объяснить это:

#\b
1 2 3

Я пробегаю по элементам b. Поэтому я думаю, что будет использоваться каждый подмассив 2x4, и я ожидаю, что #\b даст

2 2 2

так как:

c=:2 4 $i.2
   c
0 1 0 1
0 1 0 1
   #c
2

Итак, мой вопрос: почему #\b = 1 2 3? Я думаю, это как-то связано с рангами глаголов, верно? Мне трудно понять эту тему...


person Community    schedule 21.08.2012    source источник
comment
Я просто хотел уточнить, что ваше непонимание связано не с глаголом #, а с наречием \ . @Eelvex проделал большую работу, объяснив функциональность \ ниже.   -  person Tikkanz    schedule 22.08.2012


Ответы (2)


Самый простой способ увидеть, что происходит, — поставить < на \b:

   <\b
┌───────┬───────┬───────┐
│0 1 0 1│0 1 0 1│0 1 0 1│
│0 1 0 1│0 1 0 1│0 1 0 1│
│       │       │       │
│       │0 1 0 1│0 1 0 1│
│       │0 1 0 1│0 1 0 1│
│       │       │       │
│       │       │0 1 0 1│
│       │       │0 1 0 1│
└───────┴───────┴───────┘

u\y применяет u к префиксам y:

<\1 2 3
┌─┬───┬─────┐
│1│1 2│1 2 3│
└─┴───┴─────┘
#\1 2 3
1 2 3
*/\1 2 3
1 2 6

Итак, #\b дает вам количество элементов каждого из префиксов b.

Вы, вероятно, думали, что получите 2-ранговое количество элементов b:

#"2 b
2 2 2
<"2 b
┌───────┬───────┬───────┐
│0 1 0 1│0 1 0 1│0 1 0 1│
│0 1 0 1│0 1 0 1│0 1 0 1│
└───────┴───────┴───────┘
person Eelvex    schedule 21.08.2012

Чтобы получить количество элементов ранга 0 в многомерном массиве, сделайте следующее:

   rank_0s =: */&$
   wild1 =: 2 3 4 $ 'abcdefghijklmnopqrstuvwxyz'

   rank_0s wild1
24
person m1ndb3nd3r    schedule 23.08.2012