【问题标题】:Store vector results of a cycle while in an array 3D在 3D 数组中存储循环的向量结果
【发布时间】:2020-06-12 17:04:41
【问题描述】:

我正在尝试为每个时间增量和每个网格点存储 v_tide 的结果。 我需要存储取决于纬度、经度和时间的 v_tide 结果。

例如,如果时间向量的维度为 120x1、纬度 101x121 和经度 101x121,则 v_tide 矩阵的维度为 120x101x121。

northward_velocity = fes.Handler("ocean", "memory", configuration_file)
# eastward_velocity = fes.Handler("ocean", "memory", configuration_file)

# GRID

lats = np.arange(1, 2, 0.5)
lons = np.arange(-79, -78, 0.5)

assert lons.shape == lats.shape
size = lats.size

lons, lats = np.meshgrid(lons, lats)

# DATES

ai, mi, di = 2019, 6, 3
af, mf, df = 2019, 6, 4
dates = datetime(ai, mi, di)
step = timedelta(minutes=60)

# DATENUM

def datenum(dt):
   mdn = dt + timedelta(days = 366)
   frac = (dt - datetime(dt.year,dt.month,dt.day,0,0,0)).seconds/86400.0
   return mdn.toordinal() + frac

dat=np.empty(lons.shape,dtype='datetime64[us]')

while dates < datetime(af, mf, df):
    dat.fill(dates)
    v_tide, _ = northward_velocity.vector(lats.ravel(), lons.ravel(), dat.ravel())
    # u_tide, lp = eastward_velocity.vector(lats.ravel(), lons.ravel(), dates.ravel())
    dates += step

【问题讨论】:

  • 好的,问题出在哪里?或者你的问题是什么?
  • 你好@Joe,我的问题是我应该如何将每个时间增量的 v_tide 结果和每个网格坐标存储在一个数组中。
  • 不清楚v_tide是什么数据类型。您提到的尺寸(101、120、121)与代码中的latslons不一致;这也无济于事。
  • 您对 Numpy 的熟悉程度如何?这应该是一个非常基本的事情。 stackoverflow.com/questions/40690248/…

标签: python python-2.7 numpy datetime


【解决方案1】:

您正在寻找这样的东西吗?

import numpy as np

n = 10
time = np.arange(n)

all_data = np.zeros((10, 5, 6))

for i in range(n):

    tide = np.random.rand(5, 6)
    all_data[i] = tide

这是一个非常糟糕和基本的例子。可能有 100 种方法可以做得更好。但我们对您的数据一无所知,它应该让您开始。

Filling a 2D matrix in numpy using a for loop

请阅读以下教程:

https://numpy.org/devdocs/user/quickstart.html#indexing-slicing-and-iterating

https://scipy-lectures.org/

【讨论】:

    猜你喜欢
    • 2021-01-03
    • 2017-08-06
    • 2022-08-03
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多