代码
import numpy as np
arr3 = np.array([], dtype=float)
val=1
for i in range(7):
if i == 0 or i == 3:
np.append(arr3,np.nan)
else:
np.append(arr3,val)
val+=1
arr3
输出
array([], dtype=float64)
运行此代码时,它不提供任何输出。我不知道原因。
答案 0 :(得分:1)
请注意,正如numpy.append docs所说,追加不是就地发生的,这就是numpy.append
return
的新数组。考虑以下示例:
import numpy as np
arr = np.array([0],dtype='uint8')
arr2 = np.append(arr,1)
print(arr) #[0]
print(arr2) #[0 1]
您的代码应在更改以下几行后起作用:
np.append(arr3,np.nan)
到
arr3=np.append(arr3,np.nan)
和
np.append(arr3,val)
到
arr3=np.append(arr3,val)
答案 1 :(得分:0)
列表追加比np.append
(或np.concatenate
上的其他任何变体)快。列表追加就地工作,向现有列表添加“指针”。 np.concatenate
(即使有np.append
封面)也会在每次调用时创建一个新数组,需要完整副本。如果必须迭代构建数组,请使用列表:
In [85]: alist = []
In [86]: val=1
In [87]: for i in range(7):
...: if i==0 or i==3:
...: alist.append(np.nan)
...: else:
...: alist.append(val)
...: val +=1
...:
In [88]: alist
Out[88]: [nan, 1, 2, nan, 3, 4, 5]
In [89]: arr = np.array(alist)
In [90]: arr
Out[90]: array([nan, 1., 2., nan, 3., 4., 5.])