附加值时NumPy数组中的问题

问题描述 投票:0回答:2

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)

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

python arrays numpy
2个回答
1
投票

请注意,因为numpy.append docs说附加不会就地发生,那就是numpy.append returns新阵列。考虑以下示例:

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)

0
投票

列表追加比np.append(或np.concatenate上的任何其他变体)快。 List append就地工作,向现有列表添加“指针”。 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.])
© www.soinside.com 2019 - 2024. All rights reserved.