我有一个数组中的数据
第一列是time
。第二,latitude
,第三longitude
,第四precipitation
样品:
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轴是时间。
降水量将位于每个三维网格点。
例如,在下图中:
气泡的大小代表不同的降水量(忽略颜色)
如何使用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个经度
答案 0 :(得分:2)
所以你想要一个二维数组,其内部维度包含所有数据,外部维度按lon,lat,time排序。
您可以将文件作为值数组读入,转换为2d数组以将它们分组到每个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]])
视图和排序的愚蠢描述了here
答案 1 :(得分:0)
您不能使用numpy reshape原因很简单:原始数组(时间和位置)中的数据不完整,而不是您想要的结果。在重塑之前和之后,元素的数量必须相同。
你必须循环读取你的初始数组并填充你的新数组。
希望有所帮助