gpt4 book ai didi

python - 以 pythonic 方式填充 2D numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:36 24 4
gpt4 key购买 nike

我正在尝试填充一个 2D numpy 数组。根据我的经验,以下内容不会随着数组大小的增加而很好地扩展。

x=np.array([2,3,4])
y=np.array([1,3,9,13])
mat=np.zeros((x.size,y.size))
for i in range(nx):
for j in range(ny):
if x[i] > y[j]:
mat[i,j] = 1
else:
mat[i,j] = -1

理想情况下,我想使用列表推导式如果只是一维就简单了

mat=np.asarray([foo(x_) for x_ in x])

但是如何将其推广到二维 np.arrays?其他基于 numpy 的解决方案也适用,但效率是这里的关键指标

最佳答案

你的垫子:

In [352]: mat
Out[352]:
array([[ 1., -1., -1., -1.],
[ 1., -1., -1., -1.],
[ 1., 1., -1., -1.]])

针对 y 广播 x:

In [353]: x[:,None]>y
Out[353]:
array([[ True, False, False, False],
[ True, False, False, False],
[ True, True, False, False]], dtype=bool)

使用 where 将该 bool 掩码转换为 1/-1 数组:

In [354]: np.where(x[:,None]>y,1,-1)
Out[354]:
array([[ 1, -1, -1, -1],
[ 1, -1, -1, -1],
[ 1, 1, -1, -1]])

或者您可以将 bool 值转换为 0/1 数组,并缩放以适合

(x[:,None]>y).astype(float)*2-1

两个一维数组或列表的双循环通常可以像这样转换为外部操作。

关于python - 以 pythonic 方式填充 2D numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788110/

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