如何将python循环转换为向量编码?

2024-09-24 00:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将这个循环代码转换成向量表示法?我试了很多方法,包括试着得到一个逻辑图,但它不能播放。在

import numpy as np

coord_mask = np.zeros((10, 5), dtype=np.bool)
latx = np.random.choice(a=[False, True], size=10)
laty = np.random.choice(a=[False, True], size=5)

for i in range(0, coord_mask.shape[0]):
    for j in range(0, coord_mask.shape[1]):
        coord_mask[i, j] = latx[i] * laty[j]

print(coord_mask)

有人能帮忙吗?在


Tags: 代码infalsetrueforsizenprange
2条回答

在我看来

coord_mask = np.outer(latx, laty) 

应该会成功的。在

你自己选吧:

In [629]: coord_mask = np.zeros((10, 5), dtype=np.bool)
     ...: latx = np.random.choice(a=[False, True], size=10)
     ...: laty = np.random.choice(a=[False, True], size=5)
     ...: 
     ...: for i in range(0, coord_mask.shape[0]):
     ...:     for j in range(0, coord_mask.shape[1]):
     ...:         coord_mask[i, j] = latx[i] * laty[j]
     ...:         
In [630]: coord_mask
Out[630]: 
array([[False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

广播乘法:Nonelatx转换为(n,1)列矩阵,该矩阵将一个(m,)laty(相当于(1,m))多重叠加,产生(n,m)结果。这是一个非常方便、功能强大的numpy工具。在

^{pr2}$

outer

In [632]: np.outer(latx, laty)
Out[632]: 
array([[False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

点积的einsum推广:

In [633]: np.einsum('i,j',latx, laty)
Out[633]: 
array([[False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

使用broadcasting方法,您可以替换另一个二进制操作,如&

In [634]: latx[:,None] & laty
Out[634]: 
array([[False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False,  True,  True,  True, False],
       [False, False, False, False, False],
       [False, False, False, False, False]], dtype=bool)

相关问题 更多 >