我们说我想要减少3D矩阵。我想将第一个维度减少到大约10个元素(最好是10个但不是必需的)。我用这个代码:
import numpy
m = numpy.random.rand(37,2,100)
new_m = m[0:-1:int(m.shape[0]/10)]
# new_m.shape = (12, 2, 100)
我的问题如下:我希望第一个维度的第一个和最后一个元素与原始矩阵相同。 但是使用我当前的代码,这个条件不适用于最后一个元素:
new_m[0,:,:2], new_m[-1,:,:2]
#[[ 0.06081972 0.91343839] [ 0.89614534 0.33846807]]
#[[ 0.37289341 0.62491196] [ 0.30603305 0.1442681 ]]
m[0,:,:2], m[-1,:,:2]
#[[ 0.06081972 0.91343839] [ 0.89614534 0.33846807]]
#[[ 0.28143018 0.10626664] [ 0.30334235 0.29616713]]
正如您所看到的,new_m[-1]
不等于m[-1]
,我希望它们是。{/ p>
我的尝试/想法:
m[-1]
附加到new_m
但是我收到了此错误:
AttributeError:' numpy.ndarray'对象没有属性'追加'
new_m[-1] = m[-1]
,但我希望步骤之间的空间成比例(即步骤分开)。任何想法,建议?
答案 0 :(得分:2)
由于你正在使用numpy,你可以利用花哨的索引。我们还将使用linespace
,它会在一个范围内生成均匀间隔的点,包括端点。参数类似于您传递给range
或索引方法的参数。
indexes = np.linspace(0, len(m) - 1, 10, dtype=int)
new_m = m[indexes]