L
Lambda
I defined a function to raise a 2x2 matrix to nth power:
def matrix_power(m, n):
result = m[:]
print result is m
for i in range(n - 1):
result[0][0] = result[0][0] * m[0][0] + result[0][1] * m[1][0]
result[0][1] = result[0][0] * m[0][1] + result[0][1] * m[1][1]
result[1][0] = result[1][0] * m[0][0] + result[1][1] * m[1][0]
result[1][1] = result[1][0] * m[0][1] + result[1][1] * m[1][1]
print result == m
print "result:", result, "m:", m
return result
And the output:
False
True
result: [[1, 2], [2, 5]] m: [[1, 2], [2, 5]]
True
result: [[5, 20], [20, 425]] m: [[5, 20], [20, 425]]
True
result: [[425, 17000], [17000, 289180625]] m: [[425, 17000], [17000,
289180625]]
I find the matrix and m lists are always equal.
But these two lists are separate objects, right?
What's wrong with this code?
BTW, numpy has such a function, but it doesn't support really large
number.
Does numpy has some functions that support arbitrarily large number?
def matrix_power(m, n):
result = m[:]
print result is m
for i in range(n - 1):
result[0][0] = result[0][0] * m[0][0] + result[0][1] * m[1][0]
result[0][1] = result[0][0] * m[0][1] + result[0][1] * m[1][1]
result[1][0] = result[1][0] * m[0][0] + result[1][1] * m[1][0]
result[1][1] = result[1][0] * m[0][1] + result[1][1] * m[1][1]
print result == m
print "result:", result, "m:", m
return result
And the output:
False
True
result: [[1, 2], [2, 5]] m: [[1, 2], [2, 5]]
True
result: [[5, 20], [20, 425]] m: [[5, 20], [20, 425]]
True
result: [[425, 17000], [17000, 289180625]] m: [[425, 17000], [17000,
289180625]]
I find the matrix and m lists are always equal.
But these two lists are separate objects, right?
What's wrong with this code?
BTW, numpy has such a function, but it doesn't support really large
number.
Does numpy has some functions that support arbitrarily large number?