2015-11-06 2 views
1

У меня есть код python, где я хочу с плавающим делением для двух элементов из матрицы. Я попробовал float() и от будущий импорт, но никто из них не работает. Вот мой код.python float division не работает

from __future__ import division 
import numpy as np 

def backsub(U, b): 
    N = np.shape(U)[0] 
    x = b.copy() 
    x[N - 1, 0] = x[N - 1, 0]/U[N-1, N-1] #This keeps giving me integer results. No matter I do float(x[N - 1, 0]) or from __future__ import division 
    print x[N - 1, 0] 
    for i in range(N - 2, -1, -1): 
     for j in range(i + 1, N, 1): 
      x[i, 0] = x[i, 0] - U[i, j] * x[j] 
     x[i, 0] = x[i, 0]/U[i, i] 
    return x 

b = np.matrix('1; 2; 3') 
U = np.matrix('6, 5, 1; 0, 1, 7; 0, 0, 2') 
print backsub(U, b) 

выход:

1 
[[ 4] 
[-5] 
[ 1]] 
+1

Являются ли ваши матрицы фактически использующими 'dtype = float'? Если они являются «dtype = int», то вы ничего не сделаете, чтобы сделать поплавок, прежде чем назначать им. – Blckknght

+1

Вы получаете матрицы с целым числом. Используйте float вместо ints при их создании. – user2357112

+0

Я вижу. Спасибо! Может ли кто-нибудь отправить ваше решение в качестве ответа, чтобы я мог принять его? – ZigZagZebra

ответ

2

Попробуйте

x[i, 0] = float(x[i, 0])/U[i, i] 

Просто попробуйте

b = np.matrix('1; 2; 3', dtype=float) 
U = np.matrix('6, 5, 1; 0, 1, 7; 0, 0, 2', dtype=float) 

или вы также можете попробовать

b = np.matrix([[1], [2], [3], dtype=float) 
U = np.matrix([[6, 5, 1], [0, 1, 7], [0, 0, 2]], dtype=float) 

Надеясь, что это поможет вам.

+0

Еще не работает. :(Проблема в том, что x [N - 1, 0] = x [N - 1, 0]/U [N - 1, N - 1] должно быть плавающим. Не знаю, как это исправить. – ZigZagZebra

+0

Я отредактировал ответ Дайте мне знать, если это сработает или нет. –