gpt4 book ai didi

python - Numpy 根据另一个数组的值分配一个数组值,并根据向量选择列

转载 作者:行者123 更新时间:2023-12-01 00:56:14 24 4
gpt4 key购买 nike

我有一个二维数组

X
array([[2, 3, 3, 3],
[3, 2, 1, 3],
[2, 3, 1, 2],
[2, 2, 3, 1]])

和一维数组

y
array([1, 0, 0, 1])

对于X的每一行,我想找到X具有最低值且y值为1的列索引,并将第三个矩阵中相应的行列对设置为1

例如,对于X的第一行,最小X值(仅适用于第一行)和y = 1对应的列索引为0,那么我想要Z[0,0] = 1并且所有其他 Z[0,i] = 0。类似地,对于第二行,列索引 0 或 3 给出最低的 X 值,y = 1。然后我想要 Z[1,0] 或 Z[1,3] = 1 (最好是 Z[1,0] = 1 和所有其他 Z[1,i] = 0,因为 0 列是第一次出现)

我的最终 Z 数组将如下所示

Z
array([[1, 0, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 1]])

最佳答案

实现此目的的一种方法是使用掩码数组。

import numpy as np

X = np.array([[2, 3, 3, 3],
[3, 2, 1, 3],
[2, 3, 1, 2],
[2, 2, 3, 1]])

y = np.array([1, 0, 0, 1])
#get a mask in the shape of X. (True for places to ignore.)
y_mask = np.vstack([y == 0] * len(X))

X_masked = np.ma.masked_array(X, y_mask)

out = np.zeros_like(X)

mins = np.argmin(X_masked, axis=0)
#Output: array([0, 0, 0, 3], dtype=int64)

#Now just set the indexes to 1 on the minimum for each axis.
out[np.arange(len(out)), mins] = 1

print(out)
[[1 0 0 0]
[1 0 0 0]
[1 0 0 0]
[0 0 0 1]]

关于python - Numpy 根据另一个数组的值分配一个数组值,并根据向量选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com