首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >np矩阵的列表理解

np矩阵的列表理解
EN

Stack Overflow用户
提问于 2017-08-31 01:32:35
回答 1查看 47关注 0票数 0

我有两个np.matrixes,其中一个我正在尝试正常化。我知道,一般而言,列表理解比for循环更快,所以我尝试将double for循环转换为列表表达式。

代码语言:javascript
运行
复制
# 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])

这是我到目前为止所得到的:

代码语言:javascript
运行
复制
A = np.asarray([A/(B[i-1]/B[j-1]) for i, j in zip(range(1,q+1), range(1,q+1))])

但我认为我采取了错误的方法,因为我看不到任何显着的时间差。

任何帮助都将不胜感激。

EN

Stack Overflow用户

发布于 2017-08-31 01:46:19

首先,如果你真的指的是np.matrix,那就停止使用np.matrix。它有各种各样令人讨厌的不兼容性,而且它的作用现在已经过时了,因为有了矩阵乘法的@。即使您坚持使用没有@的Python版本,使用带有普通ndarray的dot方法仍然比处理np.matrix要好。

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

代码语言:javascript
运行
复制
A *= B
A /= B[:, np.newaxis]

通过A对操作执行broadcasting操作。这将允许NumPy直接在数组的底层数据缓冲区上执行C级别的迭代,而不必创建包装对象并对每个操作执行动态分派。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45966520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档