我已经定义了一个矩阵,所以如果我这样做
(format t "~a" (get-real-2d 0 0))
它打印出第一行第一列中的元件
如果我这样做
(format t "~a" (get-real-2d a 0 1))
它打印出在第一行第二列中的元件
如果我这样做
(format t "~a" (get-real-2d a 1 0))
它打印出在第二行第一列中的元素。
矩阵a
看起来是这样的
a =
((0 1 2)
(3 4 5)
(6 7 8))
我希望你能告诉我到底怎么写一dotimes
循环或其他循环,将作为几行可能会使用打印出矩阵get-real-2d
功能使输出看起来是这样的:
0 1 2
3 4 5
6 7 8
我只是希望你能告诉我一个漂亮的循环,这将是真正的小,我可以用它来打印,我可以在我的LISP库实实在在的专业的使用,就像一个会只使用变量矩阵。 就像是:
(format t "~a" (get-real-2d i j))
而不是一堆:
(format t "~a" (get-real-2d 0 0))
(format t "~a" (get-real-2d 0 1))
(format t "~a" (get-real-2d 0 2))
;;;;最新编辑;;; 做这个简单的电话我
(defparameter a (create-mat 3 3 +32fc1+))
创建一个3x3矩阵 - 创建垫是OpenCV的的cvCreateMat包装
从该命令在REPL输出是
(defparameter a (create-mat 3 3 +32fc1+))
A
CL-OPENCV> a
#.(SB-SYS:INT-SAP #X7FFFD8000E00)
I / E变量a是一个指针到3×3矩阵
然后我跑
(defparameter data (cffi:foreign-alloc :float :initial-contents
'(0.0f0 1.0f0 2.0f0 3.0f0 4.0f0 5.0f0 6.0f0 7.0f0 8.0f0)))
以创建矩阵中的数据 - 这是我接下来会分配给矩阵
从该命令在REPL输出是
CL-OPENCV> (defparameter data (cffi:foreign-alloc :float :initial-contents
'(0.0f0 1.0f0 2.0f0 3.0f0 4.0f0 5.0f0 6.0f0 7.0f0 8.0f0)))
DATA
CL-OPENCV> data
#.(SB-SYS:INT-SAP #X7FFFD8000E40)
I / E变量a是数据指针数据生病添加到矩阵
然后我打电话..
(set-data a data 12) to add the data to the matrix - set-data is a wrapper for opencv's cvSetData
所以现在当我运行 - (获取实时的2D是OpenCV的的cvGetReal2d包装)
(get-real-2d a 0 0) it gets the element of matrix a at row 0 col 0 which is 0.0d0
从该命令在REPL输出是
CL-OPENCV> (get-real-2d a 0 0)
0.0d0
而现在,当我运行
(get-real-2d a 0 1) it gets the element of matrix a at row 0 col 1 which is is 0.0d0
从该命令在REPL输出是
CL-OPENCV> (get-real-2d a 0 1)
1.0d0
当我运行这个循环
(dotimes (i 3)
(dotimes (j 3)
(format t "~a~%" (get-real-2d a i j))))
从该命令在REPL输出是
CL-OPENCV> (dotimes (i 3)
(dotimes (j 3)
(format t "~a~%" (get-real-2d a i j))))
0.0d0
1.0d0
2.0d0
3.0d0
4.0d0
5.0d0
6.0d0
7.0d0
8.0d0
NIL
但是当我尝试你的方法@Svante
(dotimes (i 3)
(dotimes (j 3)
(format t "~{~{~a~^ ~}~%~}" (get-real-2d a i j))))
我得到的错误:
The value 0.0d0 is not of type LIST.
[Condition of type TYPE-ERROR]
因为1次GET-实时2D的运行的输出仅仅是一个1号浮I / E
CL-OPENCV> (get-real-2d a 0 0)
0.0d0
与信息,你可以帮我打印矩阵,所以它看起来像这样
0.0d0 1.0d0 2.0d0
3.0d0 4.0d0 5.0d0
6.0d0 7.0d0 8.0d0