wide 发表于 2024-5-12 20:14:51

2个表内元素相乘,得到新表

本帖最后由 wide 于 2024-5-12 20:16 编辑

表A (1 2 )表B (4 5 6 ),如何让2个表内的元素分别相乘得到一个新表,结果(4 5 6 8 10 12)即(1*41*5 1*62*42*5 2*6)。表内元素个数任意。{:1_1:}

自贡黄明儒 发表于 2024-5-13 07:16:46

(apply 'append (mapcar '(lambda(x) (mapcar '(lambda(y) (* x y))'(4 5 6 7))) '(1 2)))

kucha007 发表于 2024-5-12 21:02:40

(defun K:TT (Lst1 Lst2 / RtnLst)
(setq RtnLst '())
(foreach a Lst1
    (foreach b Lst2
      (setq RtnLst (cons (* a b) RtnLst))
    )
)
(reverse RtnLst)
)

用法:
(K:TT (list 1 2) (list 4 5 6))

vitalgg 发表于 2024-5-12 21:09:46

本帖最后由 vitalgg 于 2024-5-12 21:12 编辑

这不就是张量积。





vitalgg 发表于 2024-5-12 21:30:09

https://atlisp.cn/function/matrix:kronecker-product

wide 发表于 2024-5-13 17:46:48

谢谢3个大佬的热心回答。明经因你们而精彩。

wide 发表于 2024-5-14 09:21:58

vitalgg 发表于 2024-5-12 21:30
https://atlisp.cn/function/matrix:kronecker-product

大佬,看不到源码,{:1_1:}

vitalgg 发表于 2024-5-14 09:24:58

本帖最后由 vitalgg 于 2024-5-14 09:26 编辑

wide 发表于 2024-5-14 09:21
大佬,看不到源码,
上面点源码,然后显示一黑框,需要在黑框里点一下。



(defun matrix:kronecker-product (m1 m2)
"克罗内克积也称张量积、直积是两个任意大小的矩阵间的运算,符号记作(x)
。.以德国数学家利奥波德·克罗内克命名"
"matrix"
"(matrix:kronecker-product '((1 2)(3 1)(5 3))
    '((0 3)(2 1)))
=> ((0 3 0 6)
    (2 1 4 2)
    (0 9 0 3)
    (6 3 2 1)
    (0 15 0 9)
    (10 5 6 3))"
(apply (quote append)
    (mapcar (quote (lambda (a)
          (mapcar (quote (lambda (x)
                (apply (quote append)
                  x)))
            (matrix:trp a))))
      (mapcar (quote (lambda (m1%)
            (mapcar (quote (lambda (m1%%)
                  (mapcar (quote (lambda (m2%)
                        (mapcar (quote (lambda (m2%%)
                              (* m1%% m2%%)))
                        m2%)))
                  m2)))
            m1%)))
      m1))))

you_boss 发表于 2024-5-14 19:26:02

自贡黄明儒 发表于 2024-5-13 07:16
(apply 'append (mapcar '(lambda(x) (mapcar '(lambda(y) (* x y))'(4 5 6 7))) '(1 2)))

这才是正经写法

xyp1964 发表于 2024-5-17 23:08:43

(defun abc(a b)(apply'append(mapcar'(lambda(x)(mapcar'(lambda(y)(* x y))b))a)))
页: [1]
查看完整版本: 2个表内元素相乘,得到新表