簡體   English   中英

在 Python 數組的多個位置插入零

[英]Inserting zeros at multiple locations of an array in Python

我有一個列表T2和一個數組X 我想根據T2X的特定位置插入零。 例如,對於X[0] ,必須在除T2[0]中指定的位置之外的所有位置插入零,對於X[1] ,必須在除T2[1]中指定的位置之外的所有位置插入零T2[1] 我介紹了當前和預期的輸出。

import numpy as np

T2=[[0, 3, 5, 8, 9, 10, 11],[0, 2, 3, 5, 6, 8, 9, 10, 11]]

X=np.array([np.array([4.17551036e+02, 3.53856161e+02, 2.82754301e+02, 1.34119055e+02,
              6.34573886e+01, 2.08344718e+02, 1.00000000e-24])               ,
       np.array([4.17551036e+02, 3.32821605e+02, 2.94983702e+02, 2.78809292e+02,
              1.26991664e+02, 1.36026510e+02, 8.31512525e+01, 2.07329562e+02,
              1.00000000e-24])                                               ],
      dtype=object)

C1=0.0

index=0

for m in range(0,len(X)):
    for j in range(T2[m][-1]):
        if(j!=T2[m][index]):
            X[m] = np.insert(X[m], j, C1, axis=None)  
        else:
            index+=1

print([X])

當前output是

[array([array([4.17551036e+02, 0.00000000e+00, 0.00000000e+00, 3.53856161e+02,
              0.00000000e+00, 2.82754301e+02, 0.00000000e+00, 0.00000000e+00,
              1.34119055e+02, 6.34573886e+01, 2.08344718e+02, 1.00000000e-24]),
       array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
              0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
              0.00000000e+00, 4.17551036e+02, 3.32821605e+02, 2.94983702e+02,
              2.78809292e+02, 1.26991664e+02, 1.36026510e+02, 8.31512525e+01,
              2.07329562e+02, 1.00000000e-24])                               ],
      dtype=object)]

預期的 output 是

[array([array([4.17551036e+02, 0.00000000e+00, 0.00000000e+00, 3.53856161e+02,
              0.00000000e+00, 2.82754301e+02, 0.00000000e+00, 0.00000000e+00,
              1.34119055e+02, 6.34573886e+01, 2.08344718e+02, 1.00000000e-24]),
       array([4.17551036e+02, 0.00000000e+00, 3.32821605e+02, 2.94983702e+02,
              0.00000000e+00, 2.78809292e+02, 1.26991664e+02, 0.00000000e+00,
              1.36026510e+02, 8.31512525e+01, 2.07329562e+02, 1.00000000e-24]) ],
      dtype=object)]   

你把事情復雜化了。 您可以將您的問題改寫為:創建一個數組,除 T2 中的索引外,所有位置都為零。 從 X 拿走那些。

def make_array(indices, values):
    rtrn = np.zeros(np.max(indices) + 1, dtype=values.dtype)
    rtrn[indices] = values
    return rtrn


X = np.array([make_array(Ti, Xi) for Ti, Xi in zip(T2, X)], dtype=object)

您有兩個不同的任務,復合數據結構使問題復雜化,如果您將數據拆分為:

T1 = [0, 3, 5, 8, 9, 10, 11]

T2 = [0, 2, 3, 5, 6, 8, 9, 10, 11]

X1 = np.array([4.17551036e+02, 3.53856161e+02, 2.82754301e+02, 1.34119055e+02,
              6.34573886e+01, 2.08344718e+02, 1.00000000e-24])

X2 = np.array([4.17551036e+02, 3.32821605e+02, 2.94983702e+02, 2.78809292e+02,
              1.26991664e+02, 1.36026510e+02, 8.31512525e+01, 2.07329562e+02,
              1.00000000e-24])

您的兩個不同問題可以通過以下方式解決:

Y1 = np.zeros((12))
for i, value in zip(T1,X1):
    Y1[i] = value

Y2 = np.zeros((12))
for i1, i2 in enumerate(T2):
    Y2[i2] = X2[i1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM