减少ndarray的第一维 - 保留第一个和最后一个元素

时间:2017-05-22 09:06:08

标签: python numpy multidimensional-array

我们说我想要减少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],但我希望步骤之间的空间成比例(即步骤分开)。

任何想法,建议?

1 个答案:

答案 0 :(得分:2)

由于你正在使用numpy,你可以利用花哨的索引。我们还将使用linespace,它会在一个范围内生成均匀间隔的点,包括端点。参数类似于您传递给range或索引方法的参数。

indexes = np.linspace(0, len(m) - 1, 10, dtype=int)
new_m = m[indexes]