Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Adicionando uma coluna de números 1 a um array do numpy

Seja X o array numpy abaixo:

array([ 6.1101,  5.5277,  8.5186,  7.0032,  5.8598,  8.3829,  7.4764,
        8.5781,  6.4862,  5.0546,  5.7107, 14.164 ,  5.734 ,  8.4084,
        5.6407,  5.3794,  6.3654,  5.1301,  6.4296,  7.0708,  6.1891,
       20.27  ,  5.4901,  6.3261,  5.5649, 18.945 , 12.828 , 10.957 ,
       13.176 , 22.203 ,  5.2524,  6.5894,  9.2482,  5.8918,  8.2111,
        7.9334,  8.0959,  5.6063, 12.836 ,  6.3534,  5.4069,  6.8825,
       11.708 ,  5.7737,  7.8247,  7.0931,  5.0702,  5.8014, 11.7   ,
        5.5416,  7.5402,  5.3077,  7.4239,  7.6031,  6.3328,  6.3589,
        6.2742,  5.6397,  9.3102,  9.4536,  8.8254,  5.1793, 21.279 ,
       14.908 , 18.959 ,  7.2182,  8.2951, 10.236 ,  5.4994, 20.341 ,
       10.136 ,  7.3345,  6.0062,  7.2259,  5.0269,  6.5479,  7.5386,
        5.0365, 10.274 ,  5.1077,  5.7292,  5.1884,  6.3557,  9.7687,
        6.5159,  8.5172,  9.1802,  6.002 ,  5.5204,  5.0594,  5.7077,
        7.6366,  5.8707,  5.3054,  8.2934, 13.394 ,  5.4369])

Não consigo entender o funcionamento do seguinte código: (Só percebi que criou uma coluna de 1´s)

 X = np.c_[np.ones((X.shape[0],1)), X]

O resultado foi:

array([[ 1.    ,  6.1101],
       [ 1.    ,  5.5277],
       [ 1.    ,  8.5186],
       [ 1.    ,  7.0032],
       [ 1.    ,  5.8598],
       [ 1.    ,  8.3829],
       [ 1.    ,  7.4764],
       [ 1.    ,  8.5781],
       [ 1.    ,  6.4862],
       [ 1.    ,  5.0546],
       [ 1.    ,  5.7107],
       [ 1.    , 14.164 ],
       [ 1.    ,  5.734 ],
       [ 1.    ,  8.4084],
       [ 1.    ,  5.6407],
       [ 1.    ,  5.3794],
       [ 1.    ,  6.3654],
       [ 1.    ,  5.1301],
       [ 1.    ,  6.4296],
       [ 1.    ,  7.0708],
       [ 1.    ,  6.1891],
       [ 1.    , 20.27  ],
       [ 1.    ,  5.4901],
       [ 1.    ,  6.3261],
       [ 1.    ,  5.5649],
       [ 1.    , 18.945 ],
       [ 1.    , 12.828 ],
       [ 1.    , 10.957 ],
       [ 1.    , 13.176 ],
       [ 1.    , 22.203 ],
       [ 1.    ,  5.2524],
       [ 1.    ,  6.5894],
       [ 1.    ,  9.2482],
       [ 1.    ,  5.8918],
       [ 1.    ,  8.2111],
       [ 1.    ,  7.9334],
       [ 1.    ,  8.0959],
       [ 1.    ,  5.6063],
       [ 1.    , 12.836 ],
       [ 1.    ,  6.3534],
       [ 1.    ,  5.4069],
       [ 1.    ,  6.8825],
       [ 1.    , 11.708 ],
       [ 1.    ,  5.7737],
       [ 1.    ,  7.8247],
       [ 1.    ,  7.0931],
       [ 1.    ,  5.0702],
       [ 1.    ,  5.8014],
       [ 1.    , 11.7   ],
       [ 1.    ,  5.5416],
       [ 1.    ,  7.5402],
       [ 1.    ,  5.3077],
       [ 1.    ,  7.4239],
       [ 1.    ,  7.6031],
       [ 1.    ,  6.3328],
       [ 1.    ,  6.3589],
       [ 1.    ,  6.2742],
       [ 1.    ,  5.6397],
       [ 1.    ,  9.3102],
       [ 1.    ,  9.4536],
       [ 1.    ,  8.8254],
       [ 1.    ,  5.1793],
       [ 1.    , 21.279 ],
       [ 1.    , 14.908 ],
       [ 1.    , 18.959 ],
       [ 1.    ,  7.2182],
       [ 1.    ,  8.2951],
       [ 1.    , 10.236 ],
       [ 1.    ,  5.4994],
       [ 1.    , 20.341 ],
       [ 1.    , 10.136 ],
       [ 1.    ,  7.3345],
       [ 1.    ,  6.0062],
       [ 1.    ,  7.2259],
       [ 1.    ,  5.0269],
       [ 1.    ,  6.5479],
       [ 1.    ,  7.5386],
       [ 1.    ,  5.0365],
       [ 1.    , 10.274 ],
       [ 1.    ,  5.1077],
       [ 1.    ,  5.7292],
       [ 1.    ,  5.1884],
       [ 1.    ,  6.3557],
       [ 1.    ,  9.7687],
       [ 1.    ,  6.5159],
       [ 1.    ,  8.5172],
       [ 1.    ,  9.1802],
       [ 1.    ,  6.002 ],
       [ 1.    ,  5.5204],
       [ 1.    ,  5.0594],
       [ 1.    ,  5.7077],
       [ 1.    ,  7.6366],
       [ 1.    ,  5.8707],
       [ 1.    ,  5.3054],
       [ 1.    ,  8.2934],
       [ 1.    , 13.394 ],
       [ 1.    ,  5.4369]])

Poderiam me esclarecer o funcionamento do código?

6 respostas

Olá Edson, Bom dia No caso você tem um array mas gostaria de uma Matriz? se for tente montar o "array" conforme abaixo.

matriz = [[ 6.1101,  5.5277,  8.5186,  7.0032,  5.8598,  8.3829,  7.4764],      
           [8.5781,  6.4862,  5.0546,  5.7107, 14.164 ,  5.734 ,  8.4084], 
           [5.6407,  5.3794,  6.3654,  5.1301,  6.4296,  7.0708,  6.1891]]

@Aaron Nelson Lopes: eu queria apenas entender passo a passo o código:

 X = np.c_[np.ones((X.shape[0],1)), X]

Entendi, manda o restante do código

@Aaron Nelson Lopes :

Sò tem isso:

import numpy as np

X = np.array([ 6.1101,  5.5277,  8.5186,  7.0032,  5.8598,  8.3829,  7.4764,
        8.5781,  6.4862,  5.0546,  5.7107, 14.164 ,  5.734 ,  8.4084,
        5.6407,  5.3794,  6.3654,  5.1301,  6.4296,  7.0708,  6.1891,
       20.27  ,  5.4901,  6.3261,  5.5649, 18.945 , 12.828 , 10.957 ,
       13.176 , 22.203 ,  5.2524,  6.5894,  9.2482,  5.8918,  8.2111,
        7.9334,  8.0959,  5.6063, 12.836 ,  6.3534,  5.4069,  6.8825,
       11.708 ,  5.7737,  7.8247,  7.0931,  5.0702,  5.8014, 11.7   ,
        5.5416,  7.5402,  5.3077,  7.4239,  7.6031,  6.3328,  6.3589,
        6.2742,  5.6397,  9.3102,  9.4536,  8.8254,  5.1793, 21.279 ,
       14.908 , 18.959 ,  7.2182,  8.2951, 10.236 ,  5.4994, 20.341 ,
       10.136 ,  7.3345,  6.0062,  7.2259,  5.0269,  6.5479,  7.5386,
        5.0365, 10.274 ,  5.1077,  5.7292,  5.1884,  6.3557,  9.7687,
        6.5159,  8.5172,  9.1802,  6.002 ,  5.5204,  5.0594,  5.7077,
        7.6366,  5.8707,  5.3054,  8.2934, 13.394 ,  5.4369])

 X = np.c_[np.ones((X.shape[0],1)), X]
solução!

Olá Edson, vou tentar explicar esse código.

Começando de dentro para fora temos o np.ones((X.shape[0],1)), essa função basicamente cria uma tabela com valores 1 com o tamanho que você informar, exemplo:

# Criando uma estrutura com 3 linhas e 2 colunas
np.ones((3, 2))
# Resultado: 3 linhas e 2 colunas preenchidos com o valor 1
array([[1., 1.],
       [1., 1.],
       [1., 1.]])

Assim é passado o (X.shape[0], 1) para indicar que queremos o mesmo número de linhas em X e 1 coluna. Então basicamente o np.ones((X.shape[0],1)) cria uma estrutura igual a X mas com todos os valores trocados por 1.


Já o np.c_ faz a união dos itens do primeiro array com os itens do segundo array, pega um item de np.ones((X.shape[0],1)) e junta com um item de X para formar uma linha, e assim por diante.

Lembrando que isso é uma comparação bem baixo nível para facilitar o entendimento, não é o exato comportamento em todos os casos principalmente em relação ao np.c_.

Diz se isso ajuda no entendimento, qualquer dúvida é só falar!

@Lucas Peixoto de Alencar Rocha : Obrigado. Vou estudar a sua explicação!