[英]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.