gpt4 book ai didi

python - numpy 基于 Mx1 矩阵创建 Mx2 矩阵

转载 作者:行者123 更新时间:2023-12-04 07:28:23 27 4
gpt4 key购买 nike

我有一个包含 800 个值的 np.array。每个值是 0 或 1。
如果值为 0,我想用 mu_0 替换它,这是一个 1x2 数组;否则,我想用 mu_1 替换它,这也是一个 1x2 数组。
我尝试使用 np.where(y == 0, mu_0, mu_1) ,但 python 只会广播 mu 的值匹配 y ,而不是相反。特别是,我得到的错误是

ValueError: operands could not be broadcast together with shapes (800,) (2,) (2,) 
我尝试扩展 y进入 (800, 2) , 通过填充 y_pad = np.c_[y, np.zeros(800)] ,但我不确定如何以每行的第一个值为条件。
如果我使用 np.where(y_pad[:, 0] == 0, ...) ,数组被切回 (800,)再次。

最佳答案

你确实可以扩展y进入 (800, 2)例如,np.repeat所以0s是0s,1s是每一行的1s。然后我们可以使用 np.where :

# first casting to (800, 1) with `newaxis` then repetition
y_rep = np.repeat(y[:, np.newaxis], repeats=2, axis=1)
result = np.where(y_rep == 0, mu_0, mu_1)

sample 运行:
mu_0 = np.array([ 9, 17])
mu_1 = np.array([-3, -5])

y = np.array([0, 0, 1, 1, 0, 1, 1, 1])
然后
>>> result

array([[ 9, 17],
[ 9, 17],
[-3, -5],
[-3, -5],
[ 9, 17],
[-3, -5],
[-3, -5],
[-3, -5]])
条件变为:
>>> y_rep == 0

array([[ True, True],
[ True, True],
[False, False],
[False, False],
[ True, True],
[False, False],
[False, False],
[False, False]])

关于python - numpy 基于 Mx1 矩阵创建 Mx2 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68102569/

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