考虑以下函数:
def random_matrix(rows, cols):
rng = np.random.default_rng(0)
return rng.random((rows, cols))
我如何构造一个函数f
,它能生成像random_matrix
这样的随机矩阵,但具有这样的性质:对于所有的r1
,r2
,c1
,c2
,f(r1, c1)[:min(r1, r2), :min(c1, c2)]
等于f(r2, c2)[:min(r1, r2), :min(c1, c2)]
?(这是标题中稍微更一般的问题的二维情况。1维的情况是平凡的,因为它是numpy的正常行为。
1条答案
按热度按时间velaa5lx1#
好吧,你必须以对角线的方式填充随机矩阵,以莫顿(Z阶)曲线https://en.wikipedia.org/wiki/Z-order_curve或https://en.wikipedia.org/wiki/Hilbert_curve的精神
更新
上面是一个简单的函数,它告诉你使用特定的z曲线实现可以生成什么样的矩阵。
例如,want_mtx(4,2)将返回True,这意味着您可以生成可以使用z曲线索引的非方形矩阵。want_mtx(8,4)
因此可以生成具有重叠样本的矩阵
例如,4x 2和8x 4矩阵的4x 2部分相同(以及8x8,16 x8等)
你可以发明自己的nd元组->线性和反函数,毕竟你更了解你的域问题。但是它总是会限制你的矩阵是如何布局的,以及允许什么维度