如果我这样做:
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])
我怎样才能做到这一点?
答案 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])