我想定义一个二维(numpy)数组,这样cell(row,col) == row+col(或这两个变量的任何其他函数:行和列)
我正在寻找一个功能性解决方案,我希望它不会使用任何内存,并且生成的构造可以传递给任何标准数组操作函数(矩阵 mult ...)
使用模板元编程在 C++ 中可行的东西。
我想定义一个二维(numpy)数组,这样cell(row,col) == row+col(或这两个变量的任何其他函数:行和列)
我正在寻找一个功能性解决方案,我希望它不会使用任何内存,并且生成的构造可以传递给任何标准数组操作函数(矩阵 mult ...)
使用模板元编程在 C++ 中可行的东西。
使用numpy.fromfunction(function, shape)
. 从文档:
通过在每个坐标上执行一个函数来构造一个数组。
因此,结果数组在坐标 (x, y, z) 处具有值 fn(x, y, z)。
因此,对于您的情况:
>>> import numpy as np
>>> arr = np.fromfunction(lambda i,j: i+j, (6,6))
>>> print arr
[[ 0. 1. 2. 3. 4. 5.]
[ 1. 2. 3. 4. 5. 6.]
[ 2. 3. 4. 5. 6. 7.]
[ 3. 4. 5. 6. 7. 8.]
[ 4. 5. 6. 7. 8. 9.]
[ 5. 6. 7. 8. 9. 10.]]
(当然,这确实使用了内存——没有办法让一个函数看起来像是一个 numpy 数组但实际上并不在内存中。但是,对于有点类似的情况,请参阅memmap
numpy 类,它访问作为 numpy 数组存储在磁盘上的文件—— 此处为文档。)