arrays - 不同大小数组(锯齿数组)的Python集合,Dask?

标签 arrays python-3.x numpy dask awkward-array

我有多个不同大小的一维 numpy 数组来表示音频数据。 由于它们的大小不同(例如 (8200,)(13246,)(61581,)),我无法将它们堆叠为1 个带有 numpy 的数组。大小差异太大,无法进行 0 填充。

我可以将它们保存在列表或字典中,然后使用 for 循环来迭代它们以进行计算,但我更希望能够以 numpy 风格来处理它。对变量调用 numpy 函数,而无需编写 for 循环。像这样的东西:

np0 = np.array([.2, -.4, -.5])
np1 = np.array([-.8, .9])
np_mix = irregular_stack(np0, np1)
np.sum(np_mix)
# output: [-0.7, 0.09999999999999998]

dask-arrays

看着这张 Dask 图片,我想知道我是否可以用 Dask 做我想做的事情。

到目前为止我的尝试是这样的:

import numpy as np
import dask.array as da

np0 = np.array([.2, -.4, -.5])
arr0 = da.from_array(np0, chunks=(3,))
np1 = np.array([-.8, .9])
arr1 = da.from_array(np1, chunks=(2,))

# stack them
data = [[arr0],
        [arr1]]

x = da.block(data)
x.compute()

# output: ValueError: ('Shapes do not align: %s', [(1, 3), (1, 2)])

问题

  1. 我是否误解了 Dask 的使用方式?
  2. 如果可能的话,我该如何做我的 np.sum() 示例?
  3. 如果可能的话,它实际上比高端单机 PC 上的 for 循环更快吗?

最佳答案

我找到了库 awkward-array ( https://github.com/scikit-hep/awkward-array ),它允许不同长度的数组,并且可以执行我要求的操作:

import numpy as np
import awkward

np0 = np.array([.2, -.4, -.5])
np1 = np.array([-.8, .9])
varlen = awkward.fromiter([np0, np1])
# <JaggedArray [[0.2 -0.4 -0.5] [-0.8 0.9]] at 0x7f01a743e790>

varlen.sum()
# output: array([-0.7,  0.1])

该库将自己描述为:“像 Numpy 一样轻松地操作复杂数据结构的数组。”

到目前为止,它似乎满足了我所需要的一切。

关于arrays - 不同大小数组(锯齿数组)的Python集合,Dask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58912123/

相关文章:

javascript - 将字符串转换为数组中的多个字符串

python-3.x - 使用同一数组重新分配多个列

python - 为什么Google Colab每个缩进级别使用2个空格-以及如何将此默认设置更改为PPE-8兼容4?

python - 如何在python docx中更改句子的字体样式

python - 抛出 numpy.array() 异常(对于最初可怕的标题感到抱歉)

Java,格式化字符串数组

javascript - 我不知道为什么我的 min 函数不起作用,它一直给我 0 作为答案

javascript - 使用 Javascript 按月将 JSON 解析为表格

python - 使用 numpy 的 ma 模块进行 nan 计算

python - c 下划线表达式 `c_` 究竟做了什么?