我正在尝试“扩展”一个数组(生成一个在所有维度上按比例分配更多元素的新数组)。我有一个具有已知数字的数组(我们称其为X
),并且我想使其尺寸(在每个维度上)大j
倍。
到目前为止,我生成了一个包含更多元素的零数组,然后使用广播将原始数字(以固定间隔)插入到新数组中。
最后,我用linspace
填补了空白,但实际上这部分与问题没有直接关系。
我使用的代码(对于n = 3)是:
import numpy as np
new_shape = (np.array(X.shape) - 1 ) * ratio + 1
new_array = np.zeros(shape=new_shape)
new_array[::ratio,::ratio,::ratio] = X
我的问题是,这不是一般性的,我必须基于ndim
修改第三行。有没有办法在我的数组中的任何数量的维度上使用这种广播?
编辑:确切地说,第三行必须是:
new_array[::ratio,::ratio] = X
如果ndim = 2 或
new_array[::ratio,::ratio,::ratio,::ratio] = X
如果ndim = 4
等等等。我想避免不得不为每种ndim编写代码
p.s。如果有更好的工具来完成整个过程(例如我不知道的“内部填充”,我将很乐意学习)。
谢谢
答案 0 :(得分:2)
array = array[..., np.newaxis]
将添加另一个尺寸
答案 1 :(得分:2)
您可以使用slice
表示法-
slicer = tuple(slice(None,None,ratio) for i in range(X.ndim))
new_array[slicer] = X
答案 2 :(得分:2)
手动构建切片元组。 ::ratio
等同于slice(None, None, ratio)
:
new_array[(slice(None, None, ratio),)*new_array.ndim] = ...