Skip to main content
 首页 » 编程设计

python之使用 Python 改变 numpy 数组的维度

2024年10月25日3shangdawei

我有一个数组中的数据。
第一列是时间。第二,纬度,第三经度,第四降水量
示例:

2 70 100 5.6  
2 70 110 5.9  
2 80 100 6.2  
2 80 110 5.0  
3 70 100 2.3  
3 70 110 1.1  
3 80 100 0.0  
3 80 110 7.9  

我想将其转换成一个数组,其中 y 轴是经度,z 轴是纬度,x 轴是时间。
降水量将位于每个 3d 网格点。

例如,在下图中:


气泡的大小代表不同的降水量(忽略颜色)

我如何使用 python 来执行此操作?

到目前为止我有:

import numpy as np<br> 
a=open('time.dat') #original file 
b=open('three.dat','w+') 
dif=np.fromfile(a)  
tim=dif[:,[0]]  
lat=dif[:,[1]]  
lon=dif[:,[2]]  
pre=dif[:,[3]] 
c=np.empty(780,360,720) 

780个时间步长,360个纬度,720个经度

请您参考如下方法:

因此,您需要一个二维数组,其内部维度包含所有数据,外部维度按经度、纬度、时间排序。

您可以将文件作为值数组读入,转换为二维数组以将它们分组到每个 4 元组中。然后转换内部数组的列顺序。接下来在内部维度上对外部维度进行排序。

>>> data = np.array([2, 70, 100, 5.6, 2, 70, 110, 5.9, 2, 80, 100, 6.2, 2, 80, 110, 5.0, 3, 70, 100, 2.3, 3, 70, 110, 1.1, 3, 80, 100, 0.0, 3, 80, 110, 7.9]) 
>>> data2 = data.reshape((8, 4)) 
>>> data2 
array([[   2. ,   70. ,  100. ,    5.6], 
       [   2. ,   70. ,  110. ,    5.9], 
       [   2. ,   80. ,  100. ,    6.2], 
       [   2. ,   80. ,  110. ,    5. ], 
       [   3. ,   70. ,  100. ,    2.3], 
       [   3. ,   70. ,  110. ,    1.1], 
       [   3. ,   80. ,  100. ,    0. ], 
       [   3. ,   80. ,  110. ,    7.9]]) 
>>> data2 = data2[:,[1,2,0,3]] 
>>> data2 
array([[  70. ,  100. ,    2. ,    5.6], 
       [  70. ,  110. ,    2. ,    5.9], 
       [  80. ,  100. ,    2. ,    6.2], 
       [  80. ,  110. ,    2. ,    5. ], 
       [  70. ,  100. ,    3. ,    2.3], 
       [  70. ,  110. ,    3. ,    1.1], 
       [  80. ,  100. ,    3. ,    0. ], 
       [  80. ,  110. ,    3. ,    7.9]]) 

描述了 View 和排序的愚蠢行为 here