使用Python来改变numpy数组的维度

时间:2014-06-19 14:55:11

标签: python numpy pivot reshape

我有一个数组中的数据 第一列是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轴是时间。
降水量将位于每个三维网格点。

例如,在下图中:

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

如何使用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个经度

2 个答案:

答案 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原因很简单:原始数组(时间和位置)中的数据不完整,而不是您想要的结果。在重塑之前和之后,元素的数量必须相同。

你必须循环读取你的初始数组并填充你的新数组。

希望有所帮助