Python NumPy tile

Python numpy tile 函数通过指定次数重复数组元素并构造新数组。此方法将输入数组视为一个块或片段,并在垂直和水平方向上重复指定的次数。

numpy.tile(arr, repetition)

此 Python numpy tile 方法将根据给定 ndarray 的 d 值或长度返回一维、二维、三维或多维数组。为了更好地理解,可以将给定数组的长度视为 d。

  • 如果重复是一个标量值,则 arr 将重复 d 次,输出维度 = max(d, arr.ndim)。例如,如果 arr 是一维的,输出将是一维的;如果 arr 是二维的,输出将是二维的,依此类推。
  • 如果 arr.ndim < d,则输出维度 = d。
  • 如果 arr.ndim > d,则输出维度 = arr.ndim。

Python numpy tile 示例

在此程序中,我们声明了一个包含三个数字的数组。对于 b 变量,重复值为 2,因此 1、2 和 3 将重复两次。下一个将重复三次。

import numpy as np

a  = np.array([1, 2, 3])

b = np.tile(a, 2)
print(b)

c = np.tile(a, 3)
print(c)
[1 2 3 1 2 3]
[1 2 3 1 2 3 1 2 3]

示例 2

在此示例中,我们将多个值用作瓦片重复参数。因此,下面的示例将把一维数组转换为二维和三维数组。

import numpy as np

a  = np.array([1, 2, 3, 4])

b = np.tile(a, (2, 2))
print(b)

c = np.tile(a, (3, 2))
print(c)

d = np.tile(a, (4, 1))
print(d)

e = np.tile(a, (2, 1, 3))
print(e)
[[1 2 3 4 1 2 3 4]
 [1 2 3 4 1 2 3 4]]

[[1 2 3 4 1 2 3 4]
 [1 2 3 4 1 2 3 4]
 [1 2 3 4 1 2 3 4]]

[[1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]
 [1 2 3 4]]

[[[1 2 3 4 1 2 3 4 1 2 3 4]]

 [[1 2 3 4 1 2 3 4 1 2 3 4]]]

np.tile(a, (3, 2))

d = len(reps) = 2

ndim = 1

max(2, 1) = 2 = d,因此它返回一个具有 3 列的数组,并且 arr 值将重复两次。

np.tile(a, (2, 1, 3)) 表示块大小 = 2,并且每个维度都有一个单维数组。每个维度中的 ndarray 值将重复三次。

Python numpy 二维 tile

对于二维数组输入,请将二维数组视为 tile 函数的单个项目。

a, (3, 2) = 整个二维数组将垂直重复 3 次,水平重复 2 次。

np.tile(a, (2, 3, 4)) = 二维数组将转换为三维,其中块大小 = 2。在每个块中,二维数组 (a) 将垂直重复 3 次,水平重复 4 次。

import numpy as np

a  = np.arange(4).reshape(2, 2)
print(a)

b = np.tile(a, (3, 2))
print(b)

c = np.tile(a, (2, 2, 3))
print(c)

d = np.tile(a, (2, 3, 4))
print(d)
[[0 1]
 [2 3]]

[[0 1 0 1]
 [2 3 2 3]
 [0 1 0 1]
 [2 3 2 3]
 [0 1 0 1]
 [2 3 2 3]]

[[[0 1 0 1 0 1]
  [2 3 2 3 2 3]
  [0 1 0 1 0 1]
  [2 3 2 3 2 3]]

 [[0 1 0 1 0 1]
  [2 3 2 3 2 3]
  [0 1 0 1 0 1]
  [2 3 2 3 2 3]]]

[[[0 1 0 1 0 1 0 1]
  [2 3 2 3 2 3 2 3]
  [0 1 0 1 0 1 0 1]
  [2 3 2 3 2 3 2 3]
  [0 1 0 1 0 1 0 1]
  [2 3 2 3 2 3 2 3]]

 [[0 1 0 1 0 1 0 1]
  [2 3 2 3 2 3 2 3]
  [0 1 0 1 0 1 0 1]
  [2 3 2 3 2 3 2 3]
  [0 1 0 1 0 1 0 1]
  [2 3 2 3 2 3 2 3]]]

接下来的两个示例将向您展示如何水平和垂直地平铺数组

水平平铺

import numpy as np

a  = np.arange(5)

b = np.tile(a, (3, 1))
print(b)

c = np.arange(4).reshape(2, 2)
print(c)

d = np.tile(c, (4, 1))
print(d)
[[0 1 2 3 4]
 [0 1 2 3 4]
 [0 1 2 3 4]]

[[0 1]
 [2 3]]
[[0 1]
 [2 3]
 [0 1]
 [2 3]
 [0 1]
 [2 3]
 [0 1]
 [2 3]]

垂直平铺

import numpy as np

a  = np.arange(5)

b = np.tile(a, (4))
print(b)

c = np.arange(4).reshape(2, 2)
print(c)

d = np.tile(c, (1, 4))
print(d)
[0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4]

[[0 1]
 [2 3]]

[[0 1 0 1 0 1 0 1]
 [2 3 2 3 2 3 2 3]]