示例代码如下。
我想根据dataNew(h, w, length)
和data(h, w, c)
得到ind(h, w)
。在length < c
中,这意味着dataNew是从数据中切出的。
在此,请确保length
和ind[i, j]
适合c
的值。
我已经通过for循环意识到了这一点,但是我采用python方式。请帮忙,谢谢!
import numpy as np
h, w, c = 3, 4, 5
data = np.arange(60).reshape((h, w, c))
print(data)
length = 3
ind = np.random.randint(0, 3, 12).reshape(h, w)
print(ind)
dataNew = np.empty((h, w, length), np.int16)
for i in range(h):
for j in range(w):
st = ind[i, j]
dataNew[i, j] = data[i, j][st : st + length]
print(dataNew)
答案 0 :(得分:1)
我们可以利用基于np.lib.stride_tricks.as_strided
的scikit-image's view_as_windows
来获取滑动窗口。 More info on use of as_strided
based view_as_windows
。
function getQueryParameter(query, parameter) {
return (window.location.href.split(parameter + '=')[1].split('&')[0]);}
最后一步基本上是使用具有这些起始索引的高级索引到窗口中。这可以简化一些,并且可能更容易理解。所以,或者,我们可以做-
from skimage.util.shape import view_as_windows
# Get all sliding windows along the last axis
w = view_as_windows(data,(1,1,length))[...,0,0,:]
# Index into windows with start indices and slice out singleton dims
out = np.take_along_axis(w,ind[...,None,None],axis=-1)[...,0]
答案 1 :(得分:1)
一种方法是使用broadcasting
创建索引数组并使用np.take_along_axis
对该数组建立索引:
ix = ind[...,None] + np.arange(length)
np.take_along_axis(data, ix, -1)