【问题标题】:Numpy "multi meshgrid"Numpy“多网格”
【发布时间】:2014-06-04 18:01:16
【问题描述】:

在 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 x n”,我必须将其记入这个全局矩阵。该矩阵采用 scipy.sparse 坐标格式。

问候,马雷克

【问题讨论】:

标签: python numpy


【解决方案1】:

我认为这回答了这个问题,尽管我不确定这是否是最终构建稀疏矩阵的最佳选择.. 无论如何,下面的代码在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 个。

【讨论】:

  • 这很好用,虽然不是很明显。 :) 在这一步我快了大约 50 倍。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2015-06-17
相关资源
最近更新 更多