В чем разница между следующей матрицей? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть фрагмент кода, подобный следующему. Я должен реализовать image2vector (), который принимает ввод формы (длина, высота, 3) и возвращает вектор формы (длина * высота * 3). Это не дает мне результат того, что я ожидаю. На самом деле, я не понимаю разницу между результатом, который я получил, и ожидаемым.

def image2vector(image):
    v = None
    v = image.reshape(1, 9, image.shape[0] * image.shape[1] * image.shape[2])
    return v

image = np.array([[[ 0.67826139,  0.29380381],
        [ 0.90714982,  0.52835647],
        [ 0.4215251 ,  0.45017551]],

       [[ 0.92814219,  0.96677647],
        [ 0.85304703,  0.52351845],
        [ 0.19981397,  0.27417313]],

       [[ 0.60659855,  0.00533165],
        [ 0.10820313,  0.49978937],
        [ 0.34144279,  0.94630077]]])

print ("image2vector(image) = " + str(image2vector(image)))

Я получил следующий результат:

image2vector(image) = [[ 0.67826139  0.29380381  0.90714982  0.52835647  0.4215251   0.45017551
   0.92814219  0.96677647  0.85304703  0.52351845  0.19981397  0.27417313
   0.60659855  0.00533165  0.10820313  0.49978937  0.34144279  0.94630077]]

Но я хочу получить следующий:

[[ 0.67826139] [ 0.29380381] [ 0.90714982] [ 0.52835647] [ 0.4215251 ] [ 0.45017551] [ 0.92814219] [ 0.96677647] [ 0.85304703] [ 0.52351845] [ 0.19981397] [ 0.27417313] [ 0.60659855] [ 0.00533165] [ 0.10820313] [ 0.49978937] [ 0.34144279] [ 0.94630077]]

В чем разница между ними? Как мне получить вторую матрицу из первой?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Разница, если вам нужен только векторный массив, или вы хотите вектор строки или столбца. обычно вектор столбца «вертикальный вектор» имеет форму (n, 1), а вектор строки «горизонтальный» имеет форму (1, n)

import numpy as np
image = np.array([[[ 0.67826139,  0.29380381],
        [ 0.90714982,  0.52835647],
        [ 0.4215251 ,  0.45017551]],

       [[ 0.92814219,  0.96677647],
        [ 0.85304703,  0.52351845],
        [ 0.19981397,  0.27417313]],

       [[ 0.60659855,  0.00533165],
        [ 0.10820313,  0.49978937],
        [ 0.34144279,  0.94630077]]])
reshapedImage = image.reshape(18,1)
reshapedImage
array([[0.67826139],
       [0.29380381],
       [0.90714982],
       [0.52835647],
       [0.4215251],
       [0.45017551],
       [0.92814219],
       [0.96677647],
       [0.85304703],
       [0.52351845],
       [0.19981397],
       [0.27417313],
       [0.60659855],
       [0.00533165],
       [0.10820313],
       [0.49978937],
       [0.34144279],
       [0.94630077]], dtype=object)
0 голосов
/ 31 марта 2020

Ваше изображение не имеет формы (длина, высота, 3)

In [1]: image = np.array([[[ 0.67826139,  0.29380381], 
   ...:         [ 0.90714982,  0.52835647], 
   ...:         [ 0.4215251 ,  0.45017551]], 
   ...:  
   ...:        [[ 0.92814219,  0.96677647], 
   ...:         [ 0.85304703,  0.52351845], 
   ...:         [ 0.19981397,  0.27417313]], 
   ...:  
   ...:        [[ 0.60659855,  0.00533165], 
   ...:         [ 0.10820313,  0.49978937], 
   ...:         [ 0.34144279,  0.94630077]]])                                                  
In [2]: image.shape                                                                            
Out[2]: (3, 3, 2)

, и вы не можете выполнить преобразование, которое вы пытаетесь:

In [3]: image.reshape(1, 9, image.shape[0] * image.shape[1] * image.shape[2])                  
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-aac5649a99ea> in <module>
----> 1 image.reshape(1, 9, image.shape[0] * image.shape[1] * image.shape[2])

ValueError: cannot reshape array of size 18 into shape (1,9,18)

Оно имеет только 18 элементы; Вы не можете увеличить количество элементов с изменением формы.

In [4]: image.reshape(1, image.shape[0] * image.shape[1] * image.shape[2])                     
Out[4]: 
array([[0.67826139, 0.29380381, 0.90714982, 0.52835647, 0.4215251 ,
        0.45017551, 0.92814219, 0.96677647, 0.85304703, 0.52351845,
        0.19981397, 0.27417313, 0.60659855, 0.00533165, 0.10820313,
        0.49978937, 0.34144279, 0.94630077]])
In [5]: _.shape                                                                                
Out[5]: (1, 18)

Видимо желаемая форма:

In [6]: image.reshape(image.shape[0] * image.shape[1] * image.shape[2],1)                      
Out[6]: 
array([[0.67826139],
       [0.29380381],
       [0.90714982],
       [0.52835647],
       ...
       [0.94630077]])

In [7]: _.shape                                                                                
Out[7]: (18, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...