Advertisement
Guest User

Untitled

a guest
Sep 25th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. import numpy as np
  2. import time
  3. import sys
  4.  
  5. class NumericalPythonTipsTest():
  6.  
  7. def __init__(self):
  8. num = 10000000
  9. self.x = np.linspace(0, 1, num=num)
  10. self.y = np.random.rand(num)*100
  11. self.dydx = np.empty(num)
  12.  
  13. self.n = 25000
  14. self.A = np.zeros((self.n, self.n))
  15. self.a1 = np.random.rand(self.n) * 100
  16. self.a2 = np.random.rand(self.n-1) * 100
  17. self.a3 = np.random.rand(self.n-1) * 100
  18.  
  19. '''
  20. 中央差分(for)
  21. '''
  22. def test_for_derivative(self):
  23. dydx = self.dydx
  24. x = self.x
  25. y = self.y
  26. tick = time.time()
  27. for i in range(1, len(x)-1):
  28. dydx[i] = (y[i+1] - y[i-1])/(x[i+1] - x[i-1])
  29. tock = time.time()
  30. print('%s: %.06f[s]' % (sys._getframe().f_code.co_name, tock-tick))
  31.  
  32. i '''
  33. 中央差分(numpy)
  34. '''
  35. def test_numpy_derivative(self):
  36. dydx = self.dydx
  37. x = self.x
  38. y = self.y
  39. tick = time.time()
  40. dxdy = (y[1:] - y[:-1])/(x[1:] - x[:-1])
  41. tock = time.time()
  42. print('%s: %.06f[s]' % (sys._getframe().f_code.co_name, tock-tick))
  43.  
  44. '''
  45. 三重対角行列(for)
  46. '''
  47. def test_for_matrix(self):
  48. A = self.A
  49. a1 = self.a1
  50. a2 = self.a2
  51. a3 = self.a3
  52. n = self.n
  53.  
  54. tick = time.time()
  55. for i in range(0, n-1):
  56. A[i, i] = a1[i]
  57. A[i+1, i] = a2[i]
  58. A[i, i+1] = a3[i]
  59. A[n-1,n-1] = a1[n-1]
  60. tock = time.time()
  61. print('%s: %.06f[s]' % (sys._getframe().f_code.co_name, tock-tick))
  62.  
  63. '''
  64. 三重対角行列(diag)
  65. '''
  66. def test_diag_martirx(self):
  67. n = self.n
  68. A = self.A
  69. a1 = self.a1
  70. a2 = self.a2
  71. a3 = self.a3
  72.  
  73. tick = time.time()
  74. A = np.diag(a1) + np.diag(a2, k=-1) + np.diag(a3, k=1)
  75. tock = time.time()
  76. print('%s: %.06f[s]' % (sys._getframe().f_code.co_name, tock-tick))
  77.  
  78. '''
  79. 三重対角行列(numpy)
  80. '''
  81. def test_numpy_martirx(self):
  82. n = self.n
  83. A = self.A
  84. a1 = self.a1
  85. a2 = self.a2
  86. a3 = self.a3
  87.  
  88. tick = time.time()
  89. i = np.arange(0, n-1)
  90. A[i, i] = a1[i]
  91. A[i+1, i] = a2[i]
  92. A[i, i+1] = a3[i]
  93. A[n-1,n-1] = a1[n-1]
  94. tock = time.time()
  95. print('%s: %.06f[s]' % (sys._getframe().f_code.co_name, tock-tick))
  96.  
  97. if __name__ == '__main__':
  98. test = NumericalPythonTipsTest()
  99. test.test_for_derivative()
  100. test.test_numpy_derivative()
  101. test.test_for_matrix()
  102. test.test_diag_martirx()
  103. test.test_numpy_martirx()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement