python - 如何使用不均匀子数组作为平铺来平铺一维 numpy 数组?

标签 python arrays numpy

有没有办法使用一维数组的子数组作为 np.tile 的输入瓦片?我开始于:

  • 一维数组,
  • 每个图 block 的大小,
  • 每个图 block 的重复次数。

在这种情况下,每个图 block 的重复次数等于该图 block 中的元素数。

例子:

arr = np.array([0,1,2,3,4])
tile_sizes = np.array([2, 3])
num_repeats = tile_sizes

#do some np.tile thing here

输出数组将是:

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

请注意,前 2 个元素(01)形成了一个形状为 (2,) 重复了 2 次。下一个图 block 是 3 元素(234)并被平铺 3 次。

此用例将涉及一百万个元素的数组,因此需要考虑内存和速度,这意味着首选广播。

实现此目的的非广播方式如下:

tiles = np.split(arr, np.cumsum(tile_sizes)[:-1])
repeated_tiles = [np.tile(tile, tile.shape[0]) for tile in tiles]
output = np.concatenate(repeated_tiles)
output
>>>>>
array([0, 1, 0, 1, 2, 3, 4, 2, 3, 4, 2, 3, 4])

最佳答案

这不是一个完美的解决方案,但如果有帮助,您可以使用 np.repeat 摆脱列表理解。

a = np.arange(5)
tile_sizes = np.array([2, 3])
tiles = np.array(np.split(a, np.cumsum(tile_sizes)[:-1]), dtype=np.object)
tiles = np.concatenate(np.repeat(tiles, tile_sizes))

关于python - 如何使用不均匀子数组作为平铺来平铺一维 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65083901/

相关文章:

python - 如何确定两个句子是否谈论相似的主题?

python - 在 Python 中访问 Flatbuffers 联合

arrays - 给定数组 A 和数字 K 创建数组 B,其中 B[i] = min(A[i], A[i+1].. A[i + K - 1])

c - 将用户输入的大数字存储到整数数组中

javascript - 如何过滤数组数组并仅返回每个内部数组的一部分?

python - 如何在 numpy ndarray 中获取每行的 N 个最大值?

python - 当存在重复值时将 numpy.array 转换为元素顺序

随机字母打字测试中的Python Tkinter属性错误条目

python - Intellij IDEA 不在构面列表中显示 Django

python - 如何使用线程检索子数组