假设我有这个清单。
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:
...........
你能推荐我能做什么吗?非常感谢。
要达到想要的效果,可以修改代码如下:
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 中的行数匹配。