2024-09-25 12:22:47 发布
网友
假设我有一个numpy数组:
x = np.array([[1, 2], [3, 4]]
把元素扩展成子矩阵最简单的方法是什么? 中间结果可能如下所示:
x = np.array([[[[1, 1],[1, 1]], [[2, 2],[2, 2]]], [[[3, 3],[3, 3]], [[4, 4],[4, 4]]]]
以及期望的结果:
x = np.array([[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
可以在所需轴上使用两个repeat:
repeat
In [34]: np.repeat(np.repeat(x, 2, 1), 2, 0) Out[34]: array([[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]])
或者,作为一种更快的方法(更适合较大的数组和重复编号),您可以使用as_strided:
as_strided
In [43]: from numpy.lib.stride_tricks import as_strided In [44]: x, y = arr.shape In [45]: xs, ys = arr.strides In [46]: result = as_strided(arr, (x, 2, y, 2), (xs, 0, ys, 0)) In [47]: result.reshape(x*2, y*2) Out[47]: array([[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]])
您可以使用numpy.repeat来执行任务。它有一个axis参数
numpy.repeat
axis
>>> a = np.array([[1, 2], [3, 4]]) >>> a array([[1, 2], [3, 4]]) >>> np.repeat(a, 2) array([1, 1, 2, 2, 3, 3, 4, 4]) >>> np.repeat(a, 2, axis=1) array([[1, 1, 2, 2], [3, 3, 4, 4]]) >>> np.repeat(np.repeat(a, 2, axis=1), 2, axis=0) array([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]])
可以在所需轴上使用两个
repeat
:或者,作为一种更快的方法(更适合较大的数组和重复编号),您可以使用
as_strided
:您可以使用
numpy.repeat
来执行任务。它有一个axis
参数相关问题 更多 >
编程相关推荐