2015-08-04 2 views
3

Я хочу добавить еще один элемент вектора, который адресности:«numpy.ndarray» объект не имеет атрибута «вставить»

import time 
from numpy import * 
from scipy.sparse.linalg import bicgstab,splu 
from scipy.sparse import lil_matrix,identity 
from scipy.linalg import lu_factor,lu_solve,cho_factor,cho_solve 
from matplotlib.pyplot import * 

#N,alfa and beta are introduced 

    M = lil_matrix((2*N,2*N), dtype='float64') 
    b=zeros(2*N) 
    M.setdiag(alfa*ones(2*N),0) 
    M.setdiag(beta*ones(2*N-1),1) 
    M.setdiag(beta*ones(2*N-1),-1) 
    M.setdiag(ones(2*N-2),2) 
    M.setdiag(ones(2*N-2),-2) 
    M=M.tocsc() 

    for i in range(0,2*N): 
     b[i]=2*dx*feval(fuente,x[i])/6.0 

    A=1.0/(3.0*dx)*M 
    u=bicgstab(A,b) 
    usol=u[0] 

А теперь я хочу usol.insert(0,1) usol=[1,usol[0],usol[1],..], но у меня есть сообщение об ошибке «numpy.ndarray» объект не имеет атрибута 'insert'

+0

'usol = insert (usol, 0, 1)' – yevgeniy

+1

Возможный дубликат [python, numpy; Как вставить элемент в начале массива] (http://stackoverflow.com/questions/20101093/python-numpy-how-to-insert-element-at-the-start-of-an-array) – yevgeniy

+0

Использование 'usol = np.concatenate (([1], usol))'. Это все, что делает 'np.insert'. – hpaulj

ответ

3

insert не является атрибутом массива. Вы можете использовать usol=insert(usol,0,1), чтобы получить нужный результат.

1

В numpy, insert является функцией, а не методом. Таким образом, вы должны будете использовать следующее:

import numpy as np 
#rest of your code 
usol=np.insert(usol,0,1) 

Это создаст копию usol со значениями вставленными. Обратите внимание, что вставка не возникает на месте. Вы можете видеть документы here

Смежные вопросы