【问题标题】:Using Python to change dimensions of numpy array使用 Python 更改 numpy 数组的维度
【发布时间】:2014-08-10 04:08:30
【问题描述】:

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

【问题讨论】:

  • 在输出中您是否在第一列中将时间与纬度混合在一起?
  • 可以解释更多你是如何得到这个结果的。前面和后面是什么
  • 时间是深度分隔符。第一列是所有纬度。
  • Moj,我想创建一个数组,其中y轴是经度,z轴是纬度,x轴是时间。
  • 降水呢?你也有它在结果中

标签: python numpy pivot reshape


【解决方案1】:

您不能使用 numpy reshape 的原因很简单:原始数组(时间和位置)中存在数据重复性,而不是您想要的结果。在重塑之前和之后,元素的数量必须相同。

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

希望对你有帮助

【讨论】:

  • 那么,我会做一个嵌套的for循环吗?如何填写我的新数组?
  • 假设您知道您有多少个时间点、经度、纬度,您可以访问任何时间/纬度/经度的降水数据。每次您填写“迷你矩阵”并下次进行。抱歉没时间给你写一点代码
  • 到目前为止,我有` import numpy as np 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]] `
【解决方案2】:

因此,您需要一个二维数组,其内部维度包含所有数据,外部维度按 lon、lat、time 排序。

您可以将文件作为值数组读取,转换为二维数组以将它们分组到每个 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 描述的视图和排序的愚蠢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2011-03-04
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多