我有一个数组中的数据。
第一列是时间
。第二,纬度
,第三经度
,第四降水量
示例:
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