无论大小如何,将一个数组装入另一个数组 - Python

Fit one array into another regardless of sizes - Python

考虑 numpy 数组 arr1 和 arr2。它们可以是任意数量的维度。例如

arr1=np.zeros([5,8])
arr2=np.ones([4,10])

我想将 arr2 放入 arr1,方法是剪掉某些维度的多余长度,或者用零填充缺失的长度。

我试过:

arr1[exec(str(",:"*len([arr1.shape]))[1:])]=arr2[exec(str(",:"*len([arr2.shape]))[1:])]

基本相同
arr1[:,:]=arr2[:,:]

我希望最好在一行中完成此操作,并且不要使用“for”循环。

你可以使用这个:

arr1[:min(arr1.shape[0], arr2.shape[0]), :min(arr1.shape[1], arr2.shape[1])]=arr2[:min(arr1.shape[0], arr2.shape[0]), :min(arr1.shape[1], arr2.shape[1])]

没有任何 for 循环。

这与您在第二次尝试中应用的概念相同,但条件是选择最小长度。

我通过以下方法解决了这个问题。我按照@hpaulj 的建议使用了 slice() 。考虑到我想将 ph10(一个数组)分配给 ph14(一个大小为 bound1 的零数组):

ph14=np.zeros(bound1)
ph10=np.array(list1)
        
ind_min=np.min([ph14.shape,ph10.shape],0)
                           
ph24=[]
for n2 in range(0,len(ind_min.shape)):
    ph24=ph24+[slice(0,ind_min[n2])]
        
ph14[ph24]=ph10[ph24]