【问题标题】:Handling Multidimensional Arrays in Numpy在 Numpy 中处理多维数组
【发布时间】:2019-08-22 15:03:33
【问题描述】:

我将坐标分组。所有组必须单独存储。首先,我将它们存储在列表中的列表中,如下所示:

PointOne: numpy.array([x, y, z])
GroupOne: numpy.array([PointOne, PointTwo ... PointLast])

All Points : [GroupOne, GroupTwo, GroupThree]

我觉得我的方法有点错误,并且 numpy 有能力将它们全部存储为单独的。我可以将一列设置为组号,但这很愚蠢。

在整个过程中,我想存储我的坐标,如 NetCDF、HDF5 等。你知道有维度(它们称为变量),如传播、温度等。所以你可以将温度变量(维度)中的值存储为 3D 和 4D 数组.但是它们是分开的,所以用户可以像这样访问它们:

readed_netcdf.temperate[5,2]

在 numpy 世界中我该如何做到这一点?

顺便说一句,我希望它遵循最佳方法,并且在未来我将使用 numba 来计算具有出色性能的所有内容。

numpy 版本:1.16.2

【问题讨论】:

  • 取决于您要对坐标执行的操作。您是否尝试将数据存储在 NetCDF 中?
  • @Istwan 不,我不想存储 netcdf。我说 netcdf 是因为它是维度方法。您可以在 netcdf 中的一个坐标处存储多个值。他们像我上面所说的那样调用变量。这就是我想将我的坐标作为维度存储在 numpy 数组中。
  • 您的问题不清楚。 numpy ndarray 在纯数组意义上是多维的 - 它有一个 shape (n,m,p,...)(0d 到 32d),并且可以像 [i,j,k...] 这样被索引。但是索引严格按计数,0,1,2,.... 它不会将比例附加到任何维度(如 NetCDF 的 latlong 比例)。您当然可以制作这样的一维数组,并使用您自己的代码来协调比例数组和数据数组。
  • h5py 术语中您询问dimension scalesdocs.h5py.org/en/stable/high/dims.html。可以将比例附加到 datasetdims 属性,“但维度比例只是另一个 HDF5 数据集。”您可以将这些标尺下载到您的numpy 会话中,但维护dims 之类的数据阵列与其标尺之间的链接是您的责任。没有numpy 机制可以为您做到这一点。
  • @hpaulj 我不确定尺寸比例是否与我所说的相同,但您明白了。我想将我的数据扩展到另一个维度。 Numpy 或 pandas 有行和列。我想维护行和列并为相同的 index 添加更多数据。所以这是我问题的维度。正如你所说,numpy 没有机制。那么你能告诉我可以遵循什么样的方法吗?

标签: python numpy multidimensional-array


【解决方案1】:

根据documentation,您可以按如下方式创建N维数组:

import numpy as np

arr = np.ndarray(shape = (5,3)) # 5 Rows by 3 columns

下面是描述的形状:

[[,,],
 [,,],
 [,,],
 [,*,],
 [,,]]

如果你想访问我放置星号的元素('*' 字符),你可以这样做:

arr[3,1] #Access the 4th row, 2nd column

然后可以通过数组的indexing or slicing 访问这些元素。在上述情况下,5 行可以用作 5 个点(每个点有 3 个维度)。让我知道这是否回答了您的问题。如果需要,我很乐意提供更多示例代码。

【讨论】:

  • 其实不是多维的。至少不像 netcdf-dimensions。 Numpy 将行视为维度,但这不是我的意思。
  • @UmutÜçok 嗯,它多维的,因为它有多个维度。对于这里的具体示例: 2. 但是,如果您愿意,您可以轻松地将这个示例调整为更多维度。这与 netcdf 中的情况相同:您将在那里定义两个维度,例如TempProp,一个长度为 5,另一个长度为 3。然后定义第一个变量,例如arr 作为取决于这两个维度的变量。瞧,一个二维变量。 jsonV 在这里用 numpy 做了什么。您可以在这里和那里选择更多维度,在 netcdf 和 numpy 中,这不是区别...
  • ...然而:我所知道的主要区别是关于 无限维度,这在 netcdf4 中当然是一件方便的事情,在 numpy 中不存在,和 indexing,这有点不同。但两者似乎都不在你的问题范围内(现在......)
  • 从未使用过 netcdf,但 numpy 示例代码确实允许使用多维数组。顾名思义,ndarrays 是 n 维数组。此外,行在 numpy @UmutÜçok 中并不是严格的维度。你可以对它们做任何你想做的事情,但必须决定你的数组的表示。您可以轻松地构造一个嵌套的 n 维数组,因为您最初试图实现这一无限维度 SpghttCd 所说的:(例如 arr = np.ndarray((3,3)) nested = np.ndarray((2 ,2)) arr[1,1] = nested ) 上图说明为:[[,,], [,[2x2],], [,,]]
  • 感谢大家的所有回答。因此,如果我得出结论:numpy 数组中的维度在 netcdf 中也意味着相同。我可以创建具有不同行的多维 numpy 数组。嵌套的 n-dim 数组我认为我想要的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 2018-10-20
  • 1970-01-01
  • 2011-03-16
  • 2018-06-28
  • 1970-01-01
  • 2021-05-01
相关资源
最近更新 更多