【问题标题】:Fit one array into another regardless of sizes - Python无论大小如何,都将一个数组放入另一个数组 - Python
【发布时间】:2020-07-14 13:47:26
【问题描述】:

考虑 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”循环。

【问题讨论】:

  • 你试过'追加'吗? arr3 = [ ] arr3.append(arr1)
  • 忘记一行。即使有效,也很难阅读和调试。花一些线来确定形状,是否需要填充,并构建必要的切片。并且远离exec;它也很难阅读和调试。 slice(a,b)在构造切片索引时可以替换a:b

标签: python numpy dimensions


【解决方案1】:

你可以用这个:

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 循环。

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

【讨论】:

  • 没错,但数组可以有任意数量的维度。
  • 哦,所以你想要说 n 维
【解决方案2】:

我通过提出以下方法解决了这个问题。我按照@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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2010-12-30
    • 2020-09-01
    • 1970-01-01
    • 2020-02-19
    • 2015-12-09
    相关资源
    最近更新 更多