我是大學的CS專業,主要從事計算三級計劃編程項目,涉及奇異值分解。該想法基本上是將m×n維的圖像轉換爲m×n矩陣,其中每個元素是代表點(m,n)處像素的顏色通道(r,g,b)的元組。我使用的是Python,因爲它是迄今爲止唯一真正教授的語言。Python - 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函數複製到我自己的程序中,並相應地修改它們?
在此先感謝。
的SVD僅適用於矩陣。你打算爲每個RGB通道做一個SVD嗎?換句話說,即使你形成一個m×n×3的數組,你也不能將它傳遞給SVD函數,因爲SVD是爲矩陣而不是任意大小的張量定義的。 – 2010-11-20 07:07:39