我是一名计算机专业的大学生,正在为我的Calc III课程开展一个涉及奇异值分解的编程项目。基本思路是将m x n大小的图像转换成一个m x n矩阵,其中每个元素都是一个元组,表示点(m, n)处像素的颜色通道(r, g, b)。我选择使用Python来实现,因为这是我目前唯一真正熟悉的语言。
据我所知,Python通常不支持将元组作为数组的元素。但我自己进行了一些研究,并找到了一个解决方法,即预先分配数组如下:
这是我最初遇到的相同错误,在做了一些研究后,我发现可以预分配数组以允许元组作为元素。
现在的问题是,我只是大学(编程水平)的第一个学期,这些由专业程序员编写的numPy函数对我来说有点黑盒子(尽管我相信对有经验的人来说它们会更清晰)。因此,编辑这些函数以允许元组比我自己的函数更加复杂。我需要从这里开始做什么?我想我应该将相关的numPy函数复制到我的程序中,并相应地进行修改?
提前感谢您的帮助。
据我所知,Python通常不支持将元组作为数组的元素。但我自己进行了一些研究,并找到了一个解决方法,即预先分配数组如下:
def image_to_array(): #converts an image to an array
aPic = loadPicture("zorak_color.gif")
ph = getHeight(aPic)
pw = getWidth(aPic)
anArray = zeros((ph,pw), dtype='O')
for h in range(ph):
for w in range(pw):
p = getPixel(aPic, w, h)
anArray[h][w] = (getRGB(p))
return anArray
对于任务的第一部分,即仅将图像转换为矩阵(不涉及线性代数),这个方法是正确的。
然而,使用SVD时就会变得更加棘手。当我使用从我的图像构建的数组(其中每个元素都是一个元组)调用内置的numPy svd函数时,会出现以下错误:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in -toplevel-
svd(x)
File "C:\Python24\Lib\site-packages\numpy\linalg\linalg.py", line 724, in svd
a = _fastCopyAndTranspose(t, a)
File "C:\Python24\Lib\site-packages\numpy\linalg\linalg.py", line 107, in _fastCopyAndTranspose
cast_arrays = cast_arrays + (_fastCT(a.astype(type)),)
ValueError: setting an array element with a sequence.
这是我最初遇到的相同错误,在做了一些研究后,我发现可以预分配数组以允许元组作为元素。
现在的问题是,我只是大学(编程水平)的第一个学期,这些由专业程序员编写的numPy函数对我来说有点黑盒子(尽管我相信对有经验的人来说它们会更清晰)。因此,编辑这些函数以允许元组比我自己的函数更加复杂。我需要从这里开始做什么?我想我应该将相关的numPy函数复制到我的程序中,并相应地进行修改?
提前感谢您的帮助。