有没有一种有效的方法可以在Python中使用一系列数字重新填充numpy数组而无需重新创建它?例如,假设我使用linspace函数
创建一个数组x = np.linspace(-5, 5, 10000)
后来我想更改数组x,使其跨越不同的范围。如果我写
x = np.linspace(-6, 6, 10000)
我销毁旧数组并创建一个新数组。这似乎是计算机时间的一大浪费。那么,是否有高效方法用新序列填充已存在的数组x而不重新创建数组?
答案 0 :(得分:0)
你可以将旧数组除以5,然后乘以6.但由于数值不稳定,它不会是完全相同的值:
>>> x = np.linspace(-5, 5, 10)
>>> x
array([-5. , -3.88888889, -2.77777778, -1.66666667, -0.55555556,
0.55555556, 1.66666667, 2.77777778, 3.88888889, 5. ])
>>> y = np.linspace(-6, 6, 10)
>>> y
array([-6. , -4.66666667, -3.33333333, -2. , -0.66666667,
0.66666667, 2. , 3.33333333, 4.66666667, 6. ])
>>> z = (x / 5.) * 6.
>>> z
array([-6. , -4.66666667, -3.33333333, -2. , -0.66666667,
0.66666667, 2. , 3.33333333, 4.66666667, 6. ])
>>> z == y
array([ True, True, True, True, False, False, True, False, False, True], dtype=bool)
顺便说一句,我测试了你的假设,这是正确的:
>>> def f():
... t = datetime.datetime.now()
... for i in range(10000):
... a = np.linspace(-5, 5, 10000)
... a = np.linspace(-6, 6, 10000)
... dt1 = datetime.datetime.now() - t
... t = datetime.datetime.now()
... for i in range(10000):
... a = np.linspace(-5, 5, 10000)
... a *= 1.2
... dt2 = datetime.datetime.now() - t
... return dt1, dt2
...
>>> a, b = f()
>>> a > b
True
>>> print a, b
0:00:01.020487 0:00:00.599225