NumPy数组中附加值时出现问题

时间:2019-04-27 12:40:34

标签: python arrays numpy

代码

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)

运行此代码时,它不提供任何输出。我不知道原因。

2 个答案:

答案 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.])