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:} (apply 'append (mapcar '(lambda(x) (mapcar '(lambda(y) (* x y))'(4 5 6 7))) '(1 2)))
(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:12 编辑
这不就是张量积。
https://atlisp.cn/function/matrix:kronecker-product 谢谢3个大佬的热心回答。明经因你们而精彩。 vitalgg 发表于 2024-5-12 21:30
https://atlisp.cn/function/matrix:kronecker-product
大佬,看不到源码,{:1_1:} 本帖最后由 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))))
自贡黄明儒 发表于 2024-5-13 07:16
(apply 'append (mapcar '(lambda(x) (mapcar '(lambda(y) (* x y))'(4 5 6 7))) '(1 2)))
这才是正经写法 (defun abc(a b)(apply'append(mapcar'(lambda(x)(mapcar'(lambda(y)(* x y))b))a)))
页:
[1]