저는 Sing-Value 분해와 관련된 Calc III 코스의 프로그래밍 프로젝트를 진행하는 대학의 CS 전공자입니다. 아이디어는 기본적으로 m x n 차원의 이미지를 m x n 행렬로 변환하는 것입니다. 여기서 각 요소는 점 (m, n)에서 픽셀의 색상 채널 (r, g, b)을 나타내는 튜플입니다. 저는 파이썬을 사용하고 있습니다. 왜냐하면 지금까지 (잘) 가르쳐 온 유일한 언어이기 때문입니다.Python - NumPy - 배열 요소로 튜플
파이썬은 일반적으로 튜플을 배열 요소로 사용하지 않습니다. 난 내 자신의 작은 연구를 다음과 같이 즉, 배열을 미리 할당 해결, 발견
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는 행렬에서 작동 :
예를 들어, (즉 튜플의 첫 번째 요소입니다 가정) "R"행렬의 SVD를 원하는 경우
는 같은 것을 사용합니다. RGB 채널 각각에 대해 SVD를 수행 할 계획입니까? 즉, m x n x 3 배열을 형성하더라도 임의의 크기의 텐서가 아닌 행렬에 대해 SVD가 정의되므로 SVD 함수에 전달할 수 없습니다. –