在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坐标格式。
问候,马雷克
答案 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个。