Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Crayon鑫
Paddle
提交
b9828bdf
P
Paddle
项目概览
Crayon鑫
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
b9828bdf
编写于
8月 13, 2020
作者:
Y
Yibing Liu
提交者:
GitHub
8月 13, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use faster algorithm for complex matmul, test=develop (#26231)
上级
5113aae6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
8 deletion
+8
-8
python/paddle/incubate/complex/tensor/linalg.py
python/paddle/incubate/complex/tensor/linalg.py
+8
-8
未找到文件。
python/paddle/incubate/complex/tensor/linalg.py
浏览文件 @
b9828bdf
...
...
@@ -56,20 +56,20 @@ def matmul(x, y, transpose_x=False, transpose_y=False, alpha=1.0, name=None):
# [1.+5.j 5.+9.j]
"""
# x = a + bi, y = c + di
#
mm(x, y) = mm(a, c) - mm(b, d) + (mm(a, d) + mm(b, c))i
#
P1 = ac; P2 = (a + b)(c + d); P3 = bd; then mm(x, y) = (P1-P3) + (P2-P1-P3)j
complex_variable_exists
([
x
,
y
],
"matmul"
)
a
,
b
=
(
x
.
real
,
x
.
imag
)
if
is_complex
(
x
)
else
(
x
,
None
)
c
,
d
=
(
y
.
real
,
y
.
imag
)
if
is_complex
(
y
)
else
(
y
,
None
)
ac
=
layers
.
matmul
(
a
,
c
,
transpose_x
,
transpose_y
,
alpha
,
name
)
P1
=
layers
.
matmul
(
a
,
c
,
transpose_x
,
transpose_y
,
alpha
,
name
)
if
is_real
(
b
)
and
is_real
(
d
):
bd
=
layers
.
matmul
(
b
,
d
,
transpose_x
,
transpose_y
,
alpha
,
name
)
real
=
ac
-
bd
imag
=
layers
.
matmul
(
a
,
d
,
transpose_x
,
transpose_y
,
alpha
,
name
)
+
\
layers
.
matmul
(
b
,
c
,
transpose_x
,
transpose_y
,
alpha
,
name
)
P2
=
layers
.
matmul
(
a
+
b
,
c
+
d
,
transpose_x
,
transpose_y
,
alpha
,
name
)
P3
=
layers
.
matmul
(
b
,
d
,
transpose_x
,
transpose_y
,
alpha
,
name
)
real
=
P1
-
P3
imag
=
P2
-
P1
-
P3
elif
is_real
(
b
):
real
=
ac
real
=
P1
imag
=
layers
.
matmul
(
b
,
c
,
transpose_x
,
transpose_y
,
alpha
,
name
)
else
:
real
=
ac
real
=
P1
imag
=
layers
.
matmul
(
a
,
d
,
transpose_x
,
transpose_y
,
alpha
,
name
)
return
ComplexVariable
(
real
,
imag
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录