私は、特異値分解を含むCalc IIIコースのプログラミングプロジェクトに取り組んでいる大学の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
これは、Aに画像を変換するだけだった割り当ての最初の部分のために正しく働いていました行列(線形代数は関与しない)。
しかし、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関数をコピーし、それに応じて修正する必要があると思いますか?
ありがとうございます。
。 RGBチャンネルごとにSVDを行う予定ですか?言い換えれば、m x n x 3配列を作成しても、SVDは任意のサイズのテンソルではなく行列に対して定義されるため、SVD関数に渡すことはできません。 –