1 | # shape of tensor
|
2 |
|
3 |
|
4 |
|
5 | Eval_shape = ->
|
6 | push(cadr(p1))
|
7 | Eval()
|
8 | shape()
|
9 |
|
10 | shape = ->
|
11 | i = 0
|
12 | ndim = 0
|
13 | t = 0
|
14 | ai = []
|
15 | an = []
|
16 | for i in [0...MAXDIM]
|
17 | ai[i] = 0
|
18 | an[i] = 0
|
19 |
|
20 | #U **a, **b
|
21 |
|
22 | save()
|
23 |
|
24 | p1 = pop()
|
25 |
|
26 | if (!istensor(p1))
|
27 | if (!iszero(p1))
|
28 | stop("transpose: tensor expected, 1st arg is not a tensor")
|
29 | push(zero)
|
30 | restore()
|
31 | return
|
32 |
|
33 | ndim = p1.tensor.ndim
|
34 |
|
35 |
|
36 | p2 = alloc_tensor(ndim)
|
37 |
|
38 | p2.tensor.ndim = 1
|
39 | p2.tensor.dim[0] = ndim
|
40 |
|
41 |
|
42 |
|
43 | for i in [0...ndim]
|
44 | push_integer(p1.tensor.dim[i])
|
45 | p2.tensor.elem[i] = pop()
|
46 |
|
47 | push(p2)
|
48 |
|
49 | restore()
|
50 |
|