在Python中重新填充现有的numpy数组

时间:2014-04-23 10:33:24

标签: python arrays numpy

有没有一种有效的方法可以在Python中使用一系列数字重新填充numpy数组而无需重新创建它?例如,假设我使用linspace函数

创建一个数组
x = np.linspace(-5, 5, 10000)

后来我想更改数组x,使其跨越不同的范围。如果我写

x = np.linspace(-6, 6, 10000)

我销毁旧数组并创建一个新数组。这似乎是计算机时间的一大浪费。那么,是否有高效方法用新序列填充已存在的数组x而不重新创建数组?

1 个答案:

答案 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