如何将一个numpy数组的选择附加到空的numpy数组

时间:2017-03-02 18:38:23

标签: python arrays numpy append

我有一个三个.txt文件,我已经成功地将它们变成了一个numpy数组。如果您好奇,这些文件是来自高级作文实验(ACE)的Level 2数据。特定文件在MAG和SWEPAM部分中找到,分别是16秒平均值和64秒平均值。坚果壳中的数据代表入站粒子场的z分量磁场,其组成部分通过测量每个区域的计数及其速度。目前该研究的重点是入境氢,但我离题了。代码如下我用来读取和保存文件(以及修复任何错误),如下所示:

Bz = np.loadtxt(r"/home/ary/Desktop/Arya/Project/Data/AC/MAG/ACE_MAG_Data_SEPT_18_2015.txt", dtype = bytes).astype(float)
SWEPAM_HV = np.loadtxt(r"/home/ary/Desktop/Arya/Project/Data/ACE/SWEPAM/Proton_Density/ACE_SWEPAM_H_Density_20150918.txt", dtype = bytes).astype(float)
SWEPAM_HD = np.loadtxt(r"/home/ary/Desktop/Arya/Project/Data/ACE/SWEPAM/Proton_Speed/ACE_SWEPAM_H_Velocity_20150918.txt",dtype = bytes).astype(float)

Bz = np.ma.masked_array(Bz, Bz <= -999, fill_value = 0)
SWEPAM_HD = np.ma.masked_array(SWEPAM_HD, SWEPAM_HD <= -999, fill_value = 0)
SWEPAM_HV = np.ma.masked_array(SWEPAM_HV, SWEPAM_HV <= -999, fill_value = 0)

Mag_time = np.arange(0,86400, 16, dtype = float)
SWEPAM_time = np.arange(0,86400,64, dtype = float)

然而,在这些数组中,我对第1349位至第2024位只特别感兴趣。这些数字很有意义,因为我调查了这两点之间发生的异常现象。所以我认为以下内容会让我获得成功。它没有,许多变化也失败了。我现在向您呈现我最近的剧本:

Mag_time_prime = np.array([])
Bz_prime = np.array([])
for i in range(1349,2024):
    append(Mag_time_prime,Mag_time[i]).astype(float)
    append(Bz_prime,Bz[i]).astype(float)
print(Mag_time_prime.shape)
print(Bz_prime.shape)

我曾经想过通过创建空数组(我确实尝试np.empty(0)为素数并且无法让它为我工作)我可以只做一个for循环来定位并附加{{1从i_thBz到指定范围内的空'prime'数组的位置。然而,'prime'数组不断弹出空数组。所以我的问题是,我哪里出错了,应该如何解决?

1 个答案:

答案 0 :(得分:0)

列表附加行为列表本身:

In [1]: alist = []
In [2]: alist.append(5)
In [3]: alist.append(3)
In [4]: alist
Out[4]: [5, 3]

np.append不会改变其论点:

In [5]: arr = np.array([])
In [6]: np.append(arr,1)
Out[6]: array([ 1.])
In [7]: np.append(arr,2)
Out[7]: array([ 2.])
In [8]: arr
Out[8]: array([], dtype=float64)

您必须将append的值分配回arr才能获得与列表等效的行为:

In [9]: arr=np.append(arr,1)
In [10]: arr=np.append(arr,2)
In [11]: arr
Out[11]: array([ 1.,  2.])

每次使用np.append时,都会创建一个新副本(它使用np.concatenate)。一次或两次没问题,但如果反复进行则效率低下。

首选方法是使用list append构建一个列表,然后从中创建一个数组:

In [12]: np.array(alist)
Out[12]: array([5, 3])

您必须先了解np.concatenate才能正确使用np.append。它是列表追加的不良替代品。