numpy数组从另一个数组

时间:2018-02-10 18:37:48

标签: python arrays python-3.x numpy

如果我这样做:

import numpy as np
b=np.array([1,2,3,4,5])
c=np.array([0.6,0.7,0.8,0.9])
b[1:]=c

我得到b =

array([1,0,0,0,0])

如果c只包含整数,它可以正常工作。但我有分数。 我希望得到这样的东西:

array([1,0.6,0.7,0.8,0.9])

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

Numpy数组是强类型的。确保您的数组具有相同的类型,如下所示:

import numpy as np

b = np.array([1, 2, 3, 4, 5])
c = np.array([0.6, 0.7, 0.8, 0.9])

b = b.astype(float)
b[1:] = c

# array([ 1. ,  0.6,  0.7,  0.8,  0.9])

如果您愿意,您甚至可以从其他数组中传递类型,例如

b = b.astype(c.dtype)

答案 1 :(得分:2)

如果您不知道类型是否匹配,使用.astype并将copy标记设置为False或使用np.asanyarray更为经济}:

>>> b_float = np.arange(5.0)
>>> b_int = np.arange(5)
>>> c = np.arange(0.6, 1.0, 0.1)
>>> 

>>> b = b_float.astype(float)
# astype makes an unnecessary copy
>>> np.shares_memory(b, b_float)
False

# avoid this using the copy flag ...
>>> b = b_float.astype(float, copy=False)
>>> b is b_float
True

# or asanyarray
>>> b = np.asanyarray(b_float, dtype=float)
>>> b is b_float
True

# if the types do not match the flag has no effect
>>> b = b_int.astype(float, copy=False)
>>> np.shares_memory(b, b_int)
False

# likewise asanyarray does make a copy if it must
>>> b = np.asanyarray(b_int, dtype=float)
>>> np.shares_memory(b, b_int)
False

答案 2 :(得分:1)

代替存储元素的b=np.array([1,2,3,4,5]) 整数执行b=np.array([1,2,3,4,5]).astype(float),它将元素存储为 float 然后执行b[1:]=c

答案 3 :(得分:1)

问题是由于类型转换。在重新分配项目之前,将两个阵列放在同一类型中基本上更好。如果不可能,您可以使用其他功能来创建您想要的数组。在这种情况下,您可以使用np.concatenate()

In [16]: np.concatenate((b[:1], c))
Out[16]: array([ 1. ,  0.6,  0.7,  0.8,  0.9])