我想用DrRacket写一些不错的数学(不仅仅是R5RS)(Racket Tag有点空)。
我真的想编写一些矩阵之类的东西:
(3 3 3)(5 3 4) (4 4 4) - > (5 3 4) (5 5 5)(5 3 4)
这样的其他东西可以设置一些漂亮的gimp过滤器......
有些人指出,这可以通过列表中的列表来完成,但我想不出这里的实际例子......
我期待着你的回复。 您诚挚的,Andreas_P
答案 0 :(得分:0)
一些注意事项:
1)你的意思是什么方案“内置于核心”? GIMP现在有一个原生的Python-fu和Script-fu
2)赢得Google AI挑战的Lisp是Common Lisp,而不是Scheme
3)我不确定,但Script-fu控制台陈述了TinyScheme,因此对于更完整的Scheme实现,我希望它对于很少的库支持非常重要
无论如何,我在矩阵“程序方式”上尝试了一些例子。为简单起见,他们对输入数据没有任何控制,但对于简单的例子,它们在DrRacket上工作正常。
(define (vect-sum x y)
(cond
((empty? x) empty)
(else
(cons (+ (first x) (first y)) (vect-sum (rest x) (rest y))))))
(define (scalar-prod a v)
(cond
((empty? v) empty)
(else
(cons (* a (first v)) (scalar-prod a (rest v))))))
(define (matr-sum x y)
(cond
((empty? x) empty)
(else
(cons (vect-sum (first x) (first y))
(matr-sum (rest x) (rest y))))))
(define (matr-scalar-prod a m)
(cond
((empty? m) empty)
(else
(cons (scalar-prod a (first m)) (matr-scalar-prod a (rest m))))))
现在对数据的简单测试就像在另一个答案中一样:
> (define m '((3 3 3)(5 3 4)(4 4 4)))
> m
'((3 3 3) (5 3 4) (4 4 4))
> (matr-scalar-prod 3 m)
'((9 9 9) (15 9 12) (12 12 12))
答案 1 :(得分:-1)
Python中的一个原则是不允许语言保持在你和你的问题之间,编写你自己的Matrix操作代码是微不足道的。如果你想要高性能的操作,你可以使用第三方库,比如NumPy(甚至可以在GIMP环境中)来获取它。
因此,对于允许scallar乘法并添加一个的Matrix类,可以简单地写:
class Matrix(object):
def __init__(self, rows, cols, *args):
self.rows = rows
self.cols = cols
self.values = args
def __getitem__(self, (i,j)):
return self.values[i * self.cols + j]
def __setitem__(self,(i,j), value):
self.values[i * self.cols + j] = value
def __add__(self, other):
values = []
for i in range(self.rows):
for j in range(self.cols):
values.append(self[i,j] + other[i,j])
return Matrix(self.rows, self.cols, *values)
def __mul__(self, N):
return Matrix(self.rows, self.cols,*(N * v for v in self.values))
def __repr__(self):
return "\n".join (" ".join(str(self[i,j]) for j in range(self.cols)) for i in range(self.rows) )
Python的交互式控制台上的示例:
>>> m = Matrix(3,3,
... 3,3,3,
... 5,3,4,
... 4,4,4)
>>> m * 3
9 9 9
15 9 12
12 12 12
实现更多操作同样简单,并且,对于调用GIMP的API函数,使用此示例类,您可以只使用m.values,它只是一个包含所有矩阵值的列表 - 这就是GIMP PDB的方式功能使用它们。 (例如pdb.gimp_drawable_transform_matrix或pdb.plug_in_convmatrix。(我想你已经在帮助菜单下找到了GIMP的API浏览器 - 在Scheme和Python中可以使用相同的函数,只需在“_”的名称中替换“ - ”) )