Уместить один массив в другой независимо от размеров - Python - PullRequest
0 голосов
/ 14 июля 2020

Рассмотрим 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.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете использовать это:

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])]

без каких-либо для l oop.

Это та же концепция, которую вы применили во второй попытке, но с условием выбора минимальной длины.

0 голосов
/ 15 июля 2020

Я решил это, придумав следующее. Я использовал slice (), как предложил @hpaulj. Учитывая, что я хочу присвоить 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]
...