Numpy“multi meshgrid”

时间:2014-06-03 15:29:10

标签: python numpy

在numpy中有没有明显的方法来替换像:

for x in X:
    xi, xj = meshgrid(x, x, indexing='ij')

使用单个(可能更有效)的操作,如:

Xi, Xj = multi_meshgrid(X, X, indexing='ij')

X的例子如下:

X = np.array([[0,1,2,3,4,5], [5,6,7,8,9,10], [11,12,13,14,15], ...])

主要问题是我可以在X中拥有数十万和数十万个条目,并且可能经常重复操作。

问题来自于在有限元法中组装全局刚度矩阵K.对于长度为n的X中的每个条目,我有一个矩阵“n×n”,我必须将其写入该全局矩阵。该矩阵采用scipy.sparse坐标格式。

问候,马雷克

1 个答案:

答案 0 :(得分:2)

我认为这回答了这个问题,尽管我不确定这是否最适合构建稀疏矩阵。 无论如何,以下代码在X中创建了一个“视图”,因此它在计算和内存方面都非常有效。 试试吧:)

from numpy.lib.stride_tricks import as_strided

m = 3
n = 4
X = np.arange(m*n).reshape((m,n))

sz = X.itemsize
Xi = as_strided(X, shape=(m,n,n), strides=(n*sz, sz, 0))
Xj = as_strided(X, shape=(m,n,n), strides=(n*sz, 0, sz))

但是,当X不是常规矩阵时,这不起作用。例如。在您的示例中,第三行有5个元素,而其他行有6个。