matrix - 关于 fortran 函数 MATMUL() 行为的问题
问题描述
我是 fortran 的新手,我必须将不同形状的矩阵与 MATMUL() 相乘,结果不是我所期望的......
这是我的fortran代码:
integer, dimension(3,2) :: a
integer, dimension(2,2) :: b
integer :: i, j
a = reshape((/ 1, 1, 1, 1, 1, 1 /), shape(a))
b = MATMUL(a,TRANSPOSE(a))
do j = 1, 2
do i = 1, 2
print*, b(i, j)
end do
end do
结果我期望这个矩阵:
乙 =
| 3 3 | , 2x2 矩阵
| 3 3 |
相反,我收到此错误消息:
matmlt.f90(9):错误 #6366:数组表达式的形状不符合。[B] b = MATMUL(a,TRANSPOSE(a)) ------^
为了使这段代码正常工作,我必须像这样切换 MATMUL 参数:
b = MATMUL(转置(a),a)
这样,我得到了我一开始所期待的。但这并不直观。
在纸上,
一个 =
| 1 1 1 |
| 1 1 1 |
转置(a) =
| 1 1 |
| 1 1 |
| 1 1 |
斧头转置(a) =
| 3 3 |
| 3 3 |
和
转置(a) xa =
| 2 2 2 |
| 2 2 2 |
| 2 2 2 |
我的代码有什么问题?
谢谢你。
解决方案
您对变量的矩阵定义
integer, dimension(3,2) :: a
意味着,你有 3 行和 2 列(你的假设不同)。随后
a=
|11|
|11|
|11|
和
转置(a) =
|111|
|111|
matmul(a,转置(a)) =
|2 2 2|
|2 2 2|
|2 2 2|
所以你的变量 b 应该定义为
integer, dimension (3,3) :: b
代替
integer, dimension (2,2) :: b
的原因是什么
matmlt.f90(9):错误 #6366:数组表达式的形状不符合。[B] b = MATMUL(a,TRANSPOSE(a)) ------^
错误
推荐阅读
- scikit-learn - 如何使用 .fit() 进行交叉验证
- php - PHP - 英国邮政编码只返回部门
- javascript - 如何禁用 CSS 样式?
- functional-programming - SML Create 函数接收元组列表并返回列表以及每对的总和
- swift - 如何在 ForEach 循环中快速选择特定范围
- python - 将 Pandas 数据框中的 List 对象转换为 numpy 数组
- ruby-on-rails - Rails 渲染视图非常缓慢
- python - BeautifulSoup 提取没有 div 的 div 文本
- nginx - 尽管乘客的安装步骤正确,Nginx 似乎不知道“passenger_root”指令
- azure-data-factory-2 - Azure 数据工厂数据流计数不同