如何替换二进制数组Python中的多个列表?

问题描述 投票:0回答:1

假设我有这个清单。

randz = [1.59,2.51,1.73,[0.61, 0.38],2.67,0]

当计算 randz 列表的位置数时,我得到

count = [1,1,1,2,1,1]

如您所见,我想将 randz 列表替换为以下二进制数组

基于行
的位置1

zr = np.array([[1, 0, 0, 0, 0, 0],                    
               [0, 0, 0, 1, 0, 0],                    
               [0, 0, 1, 0, 0, 0],                    
               [0, 1, 0, 0, 1, 0],                    
               [1, 0, 0, 0, 0, 0],                    
               [0, 0, 0, 0, 0, 0]])

我的目标是:

newzr = np.array([[1.59, 0,            0,    0,    0,            0],                    
                  [0,    0,            0,    2.51, 0,            0],
                  [0,    0,            1.73, 0,    0,            0],
                  [0,    0.61 or 0.38, 0,    0,    0.38 or 0.61, 0],
                  [2.67, 0,            0,    0,    0,            0], 
                  [0,    0,            0,    0,    0,            0]])

但是,我在第四行(值>1)上强调,我需要在第2列和第5列或第5列和第2列中替换[0.61, 0.38]。

当计数大于 1 时,我当前的编码被破坏:

zenext=[] 
for i in range(len(randz)):     
    if count[i] == 1:        
       zenext.append(randz[i]*zr[i])     
    if count[i] > 1:     
    ...........

你能推荐我能做什么吗?非常感谢。

python arrays list optimization modeling
1个回答
0
投票

要达到想要的效果,可以修改代码如下:

import numpy as np

randz = [1.59, 2.51, 1.73, [0.61, 0.38], 2.67, 0]
count = [1, 1, 1, 2, 1, 1]

zr = np.array([[1, 0, 0, 0, 0, 0],
               [0, 0, 0, 1, 0, 0],
               [0, 0, 1, 0, 0, 0],
               [0, 1, 0, 0, 1, 0],
               [1, 0, 0, 0, 0, 0],
               [0, 0, 0, 0, 0, 0]])

zenext = []
for i in range(len(randz)):
    if count[i] == 1:
        zenext.append(randz[i] * zr[i])
    elif count[i] > 1:
        indices = np.where(zr[i] == 1)[0]
        values = np.array(randz[i])
        zenext.append(np.zeros_like(zr[i]))
        zenext[-1][indices] = values

newzr = np.array(zenext)
print(newzr)

此代码检查 count[i] 是否大于 1,如果是,则检索 zr[i] 等于 1 的索引。然后,它创建一个与 zr[i] 形状相同的零数组,将 randz[i] 中的相应值分配给检索到的索引。结果数组被追加到 zenext 列表中。

最后,zenext 被转换为 NumPy 数组 newzr,它将根据您指定的条件替换所需的值。

请注意,代码假设 randz 和 count 的长度相同,并且与 zr 中的行数匹配。

© www.soinside.com 2019 - 2024. All rights reserved.