Я учусь в университете и работаю над проектом по программированию для моего курса Calc III, включающим разложение по сингулярным числам.Идея в основном заключается в том, чтобы преобразовать изображение с размерами mxn в матрицу mxn, где каждый элемент представляет собой кортеж, представляющий цветовые каналы (r, g, b) пикселя в точке (m, n).Я использую Python, потому что это единственный язык, которому я действительно (хорошо) учил.
Из того, что я могу сказать, 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 в свою собственную программу и соответственно изменить их?
Заранее спасибо.