Python 根据默认大小重塑np.array

Python 根据默认大小重塑np.array,python,numpy,reshape,numpy-ndarray,valueerror,Python,Numpy,Reshape,Numpy Ndarray,Valueerror,共有2个np.Array,我想从shape(12,)中重塑np.array1,参考shape(4,): array1=np.数组([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,) 我试图执行重塑: array1.重塑(array2.形状) 但是,有一个错误: ValueError:无法将大小为12的数组重塑为形状(4,) 因此,预期结果

共有2个np.Array,我想从shape
(12,)
中重塑
np.array1
,参考shape
(4,)

array1=np.数组([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,)

我试图执行
重塑

array1.重塑(array2.形状)

但是,有一个错误:
ValueError:无法将大小为12的数组重塑为形状(4,)

因此,预期结果为
array1
,包含4个元素:
np.array([1,2,3,4])
,, 而不是12个


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

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

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
是多维的,则使用:


或者,如果要将阵列拆分为三等分,请使用:


在“重塑”之后,元素5到12会发生什么变化?你不是在这里截断数组吗?@coldspeed,我只需要从
array1
中选择前4个元素。是的,我知道整形和截断是两种不同的操作。截断更改大小,但保持形状。“重塑”保留大小,但更改形状。最后,我必须使用切片。感谢)对于一般情况,
array1[tuple(array2.shape中d的切片(0,d)]
@kmario23,您正确理解了这个问题。它按预期工作。谢谢@Cindy great,:)@MadPhysician虽然你的方法很好,但我还是会毫不犹豫地使用
for
循环,这样我们就可以不用它了@卡马里奥23。我只会在维数可以任意的情况下使用它。
sliced_arr = array1[tuple(slice(0, d) for d in array2.shape)]
# 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])]