python - 按 Fortran 连续顺序 reshape dask.array

标签 python arrays numpy reshape dask

我想问一下是否有办法 reshape Fortran-contiguous (column-major) order中的dask数组。因为尚不支持 np.reshape 函数的并行版本 (see here)。

最佳答案

Fortran 连续(列优先)顺序只是 C 连续(行优先)顺序的倒转。因此,对于 dask 数组不支持 order='F' 的事实,有一个简单的解决方法:

  • 转置数组以反转其维度。
  • 将其重新塑造成您想要的形状的反面。
  • 将其转回。

在函数中:

def reshape_fortran(x, shape):
    return x.T.reshape(shape[::-1]).T

用 NumPy/dask 转置基本上是免费的(它不复制任何数据),所以原则上这个操作也应该是相当高效的。

这是一个简单的测试来验证它是否正确:

In [48]: import numpy as np

In [49]: import dask.array as da

In [50]: x = np.arange(100).reshape(10, 10)

In [51]: y = da.from_array(x, chunks=5)

In [52]: shape = (2, 5, 10)

In [53]: np.array_equal(reshape_fortran(y, shape).compute(),
    ...:                x.reshape(shape, order='F'))
    ...:
Out[53]: True

关于python - 按 Fortran 连续顺序 reshape dask.array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45479325/

相关文章:

java - 在java中的String数组位置分配一个新值

JavaScript - 查找所有具有类的元素,查找重复项并显示它们

python - 如何在 scipy 中最小化具有离散变量值的函数

Python 元组数组

python - 计算活人与死人的年龄

python - 如何在保留所有行的同时连接行并使每组有一个结果值

python - 我正在尝试抓取网页并将结果输出到 csv 文件中

python - IMDbPY 安装失败

javascript - 在js数组中查找下一个和上一个键

python - numpy 数组指标操作