np矩阵的列表理解

2024-03-29 12:03:20 发布

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

我有两个np.矩阵,其中一个我正在尝试正常化。我知道,一般来说,列表理解比for循环快,所以我尝试将double for循环转换为列表表达式。你知道吗

# normalize the rows and columns of A by B
 for i in range(1,q+1):
     for j in range(1,q+1):
         A[i-1,j-1] = A[i-1,j-1] / (B[i-1] / B[j-1])

到目前为止,我得到的是:

A = np.asarray([A/(B[i-1]/B[j-1]) for i, j in zip(range(1,q+1), range(1,q+1))])

但我认为我采取了错误的方法,因为我没有看到任何明显的时差。你知道吗

任何帮助都将不胜感激。你知道吗


Tags: columnsandofthein列表forby
1条回答
网友
1楼 · 发布于 2024-03-29 12:03:20

首先,如果你的意思是np.matrix,停止使用np.matrix。它有各种令人讨厌的不兼容性,而且它的角色已经过时了,因为矩阵乘法的@已经存在。即使您被困在没有@的Python版本上,对普通ndarray使用dot方法仍然比处理np.matrix要好。你知道吗

无论是for循环还是列表理解,都不应该对NumPy数组使用任何Python级别的迭代构造,除非确定没有更好的选择。假设A是2D,B是1D,形状分别是(q, q)(q,),那么对于这种情况,您应该做的是

A *= B
A /= B[:, np.newaxis]

broadcastingA上的操作。这将允许NumPy直接在数组的底层数据缓冲区上执行C级的迭代,而不必创建包装器对象并对每个操作执行动态调度。你知道吗

相关问题 更多 >