n 维数组/张量的数据结构,例如 A[0, :, :] 和 A[1, :, :] 可以具有不同的形状

Bas*_*asj 5 python numpy sparse-matrix multidimensional-array pandas

使用 Python/Numpy,我正在处理 n 维数据(最好在 a 中ndarray),这样:

  • (1):参差不齐的数组

    例如A[0, :, :],..., A[49, :, :]可以是形状 100x100,并且A[50, :, :]可以是形状 10000x10000:我不想创建形状为 (..., 10000, 10000) 的 ndarray,因为这会浪费空间:A[n, :, :]仅包含 n = 0 .. 49 的 100x100 个系数。

  • (2):标记索引代替位置索引

    我还希望能够使用B[:, :, :, :, 202206231808], B[:, :, :, :, 19700101000000],即最后一个维度将是格式为 YYYYMMDDhhmmss 的数字时间戳或更一般的整数标签(不在连续的 0 .. n-1 范围内)

  • (3): 简单的类似 Numpy 的算术

    所有这些都应该(尽可能地)保留所有标准 Numpy 操作,例如B.mean(axis=4)对所有时间戳上的数据进行平均,以及类似有用的 Numpy 操作等。

  • (4):序列化/随机访问

    我们应该能够以这样的数据结构将 100 GB 的数据保存到磁盘上。然后第二天,如果我们只想修改几个值,我们应该能够将其保存在磁盘上,而无需重写整个 100 GB 文件:

    x = datastore.open('datastore.dat')                              # open the data store, *without* loading everything in memory
    x[20220624000000, :, :, :] = 0                                   # modify some values
    x[20220510120000, :, :, :] -= x[20220510120000, :, :, :].mean()  # modify other values
    x.close()                                                        # only a few bytes written to disk 
    
    Run Code Online (Sandbox Code Playgroud)

对于这样一个 n 维数组,使用 Numpy 或 Pandas 来说,正确的数据结构是什么? (注意:我可能有 5 或 6 个维度)

Car*_*ani 2

据我所知,您可以使用一种不一致的维度数据结构,如下tensorflow.ragged.constant()所示:

import numpy as np
import tensorflow as tf

l1 = tf.ragged.constant([[0, 1, 0], [1, 1]])
print(l1)
Run Code Online (Sandbox Code Playgroud)

此处使用 TensorFlow 库的主要优点是,您可以通过简单的指令将张量转换为 NumPy 数组your_tensor.numpy()

  • 确实不错,“tf.ragged.constant”似乎非常适合我的问题的要求(1)。您认为可以用“tf.ragged.constant”来满足我的问题的要求(2)吗?即通过整数标签访问元素,该标签不一定是 0...n-1。 (2认同)