Or simply box each row.
,.<"1>tst
┌───┐
│1 1 0 0 0 0 1 1 0 0│
├───┤
│1 1 1 0 1 1 1 1 0 0│
├───┤
│0 0 0 0 0 1 0 1 1 0│
└───┘
On Tue, Apr 10, 2018 at 10:44 AM, Raul Miller wrote:
> To get that exact
Just unbox it.
<"0?3 10$2
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│1│1│1│1│1│0│1│0│1│1│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│0│0│1│1│1│0│1│1│0│1│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│0│0│0│1│1│1│0│0│1│1│
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
tst=:<"0?3 10$2
>tst
1 1 0 0 0 0 1 1 0 0
1 1 1 0 1 1 1 1 0 0
0 0 0 0 0 1 0 1 1 0
On Tue, Apr 10, 2018
Cliff's is best, as long as the boxed contents have rank < 2.
Henry Rich
On 4/10/2018 1:26 PM, Cliff Reiter wrote:
]a=:10 6 8 <@?@$"0] 2
+-+-+-+-+-+-+-+-+-+-+
|1|1|1|1|0|0|0|1|0|1|
+-+-+-+-+-+-+-+-+-+-+
|0|1|1|1|0|1| | | | |
+-+-+-+-+-+-+-+-+-+-+
|0|1|0|1|1|0|0|1| | |
+-+-+-+-+-+-+-+-+-+-+
I probably need to back up a step:
My original data looks something like this:
t=: 4 : '(y#x),.?y#2'
]tst=: > each(10 t 6),"2 (11 t 5), 12 t 8
┌──┬─┐
│10│0│
├──┼─┤
│10│1│
├──┼─┤
│10│1│
├──┼─┤
│10│1│
├──┼─┤
│10│1│
├──┼─┤
│10│0│
├──┼─┤
│11│0│
├──┼─┤
│11│1│
├──┼─┤
│11│0│
if I understand correctly, there are 2 levels of boxing (or data can be made
into 2 level) such as
<"1 <"0 ? 3 10 $ 2
then, this will unbox the inner set without introducing fills.
; each <"1 <"0 ? 3 10 $ 2
From: Skip Cave
To:
It sounds like maybe this is what you want?
(0&{"1 wrote:
> if I understand correctly, there are 2 levels of boxing (or data can be
> made into 2 level) such as
>
> <"1 <"0 ? 3 10 $ 2
>
> then, this will unbox the inner set without introducing fills.
>
> ; each <"1 <"0 ? 3 10 $ 2
>
>
>
>
>
A new Jd release is available that fixes the problems reported with ref.
--
For information about J forums see http://www.jsoftware.com/forums.htm
To get that exact result, I'd use
f=: ,@<@;"1
but I believe Don Guinn's proposal (f=: >) would be more useful.
Thanks,
--
Raul
On Tue, Apr 10, 2018 at 12:35 PM, Skip Cave wrote:
> NB.I have an array of boxed boolean values called tst:
> $tst
>
> 132 30
>
> NB. I
Yes! Joe has the verb I need:
tst
┌──┬─┐
│10│0│
├──┼─┤
│10│0│
├──┼─┤
│10│1│
├──┼─┤
│10│0│
├──┼─┤
│10│0│
├──┼─┤
│10│0│
├──┼─┤
│11│1│
├──┼─┤
│11│0│
├──┼─┤
│11│0│
├──┼─┤
│11│0│
├──┼─┤
│11│1│
├──┼─┤
│12│1│
├──┼─┤
│12│0│
├──┼─┤
│12│0│
├──┼─┤
│12│0│
├──┼─┤
│12│0│
Here you go
sel =: (] ([ {~ (0&{"1@[ i. ])) <@[)
11 sel a
┌──┬─┐
│11│0 0 1 0 1│
└──┴─┘
12 sel a
┌──┬───┐
│12│1 0 0 0 1 0 0 1│
└──┴───┘
If you were willing to flip the order of sel it could be slightly cleaner
sel2=: (([ {~ (0&{"1@[ i. ])) <)
a sel2
NB.I have an array of boxed boolean values called tst:
$tst
132 30
NB. I look at the first three rows of tst:
3{. tst
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│0│1│1│1│0│1│1│0│0│1│0│1│1│0│1│1│1│1│0│0│0│1│1│0│0│1│1│1│ │ │
Your array seems odd: it has fills. Why? It appears you want to remove
the fills, so methinks you should have boxed the rows, not the atoms in
the rows.
From where you start, you could delete the fills with
<@:>@:(-.:)"1
to leave the fills, use
<@:>"1
or its equivalent,
]&.:>"1
Henry
]a=:10 6 8 <@?@$"0] 2
+-+-+-+-+-+-+-+-+-+-+
|1|1|1|1|0|0|0|1|0|1|
+-+-+-+-+-+-+-+-+-+-+
|0|1|1|1|0|1| | | | |
+-+-+-+-+-+-+-+-+-+-+
|0|1|0|1|1|0|0|1| | |
+-+-+-+-+-+-+-+-+-+-+
<@;"1 a
+---+---+---+
|1 1 1 1 0 0 0 1 0 1|0 1 1 1 0 1|0 1 0 1 1 0 0 1|
13 matches
Mail list logo