繁体   English   中英

在n维中扩展numpy数组

[英]expand numpy array in n dimensions

我正在尝试“扩展”一个数组(生成一个在所有维度上按比例分配更多元素的新数组)。 我有一个已知数字的数组(我们称其为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编写代码

ps如果有更好的工具来完成整个过程(例如我不知道的“内部填充”,我将很乐意学习)。

谢谢

array = array[..., np.newaxis]将添加另一个维度

本文可能会有所帮助

您可以使用slice符号-

slicer = tuple(slice(None,None,ratio) for i in range(X.ndim))
new_array[slicer] = X

手动构建切片元组。 ::ratio等效于slice(None, None, ratio)

new_array[(slice(None, None, ratio),)*new_array.ndim] = ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM