2017-03-02 43 views
-1

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

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) 

然而,这些阵列内我在仅第一千三百四十九位置向第二千○二十四位置特别感兴趣。由于我对这两点之间发生的异常进行了调查,这些数字很有意思。所以我认为以下将导致我成功。它没有和许多变化也失败了。我为大家介绍最新的剧本我现在所拥有的:

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循环来定位的位置,并将BzMag_time的位置追加到指定范围内的空'prime'数组中。然而,'prime'数组不断弹出空数组。所以我的问题,我在哪里出错了,我应该如何解决它?

+0

**请勿使用'numpy.append' **。如果您必须附加,请使用列表。如果您必须使用数组追加,请按照记录使用它, – hpaulj

+0

我如何不按预期使用'numpy.append'?该文件说,第一个位置是你想追加的列表,第二个是你想追加到该列表的值。我想追加的列表是质数中的一个,我希望追加的值是相应数组的第i个位置。 – anabstudent

+1

但'np.append'返回一个值,即2个数组的连接。 'alist.append()'改变'alist'(in-place)。这就是我说为什么不使用它的重要原因。人们错误地将它用作附加列表。 – hpaulj

回答

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) 

您必须分配的appendarr值来获取列表相当于行为:

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

每个ti我使用np.append您创建一个新副本(它使用np.concatenate)。对于一两次没关系,但如果重复进行,效率不高。

的首选方法是使用列表追加建立一个清单,然后从该制造阵列:

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

你必须明白np.concatenate可以使用np.append之前正常。它是列表追加的一个可怜的替代品。

相关问题