【问题标题】:Reshape np.array based on the default size根据默认大小重塑 np.array
【发布时间】:2019-08-30 02:10:01
【问题描述】:

有 2 个 np.arrays,我想从形状 (12,) 重塑 np.array1 以参考具有形状 (4,)array2

array1 = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])array1.shape 返回:(12,)

array2 = np.array([ 12, 34, 56, 78])array2.shape 返回:(4,)

我尝试执行reshape:

array1.reshape(array2.shape)

但是,有一个错误: ValueError: cannot reshape array of size 12 into shape (4,)

所以,预期结果是 array1 有 4 个元素: np.array([ 1, 2, 3, 4]), 而不是 12。

如果您有任何想法和帮助,我将不胜感激。

【问题讨论】:

  • 在这个“重塑”之后元素 5 到 12 会发生什么?你这里不就是截断数组吗?
  • @coldspeed,我只需要从 array1 中选择前 4 个元素。是的,我知道重塑和截断是两个不同的操作。截断改变大小,但保持形状。 Reshape 保持大小,但改变形状。最后,我必须使用切片。谢谢)

标签: python numpy reshape numpy-ndarray valueerror


【解决方案1】:

如果我正确理解您的要求,我认为您正在寻找的是简单切片:

In [140]: array2 = np.array([ 12,  34,  56,  78])
In [135]: a_sliced =  array1[:array2.shape[0]]
In [136]: a_sliced.shape
Out[136]: (4,)

如果array2 是多维的,则使用approach suggested by Mad Physicist

sliced_arr = array1[tuple(slice(0, d) for d in array2.shape)]

或者,如果您打算将数组分成三等分,则使用numpy.split(),如下所示:

# split `array1` into 3 portions
In [138]: np.split(array1, 3)
Out[138]: [array([1, 2, 3, 4]), array([5, 6, 7, 8]), array([ 9, 10, 11, 12])]

【讨论】:

  • 一般情况下,array1[tuple(slice(0, d) for d in array2.shape)]
  • @kmario23,您正确理解了问题。它按预期工作。谢谢!
  • @Cindy 很棒,:)
  • @MadPhysicist 虽然你的方法很好,但我有点犹豫是否使用for 循环,我们可以不用它!
  • @kmario23。我只会在维度数可以是任意的情况下使用它。
猜你喜欢
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 2011-05-08
  • 2017-07-14
相关资源
最近更新 更多