Arrays 将秩2的数组转换为秩1的数组
我有以下最简单的例子:Arrays 将秩2的数组转换为秩1的数组,arrays,multidimensional-array,fortran,Arrays,Multidimensional Array,Fortran,我有以下最简单的例子: program main double precision, dimension(3) :: rankone double precision, dimension(3,1) :: ranktwo double precision, dimension(3) :: output rankone = 1 ranktwo = 2 output = rankone + rankt
program main
double precision, dimension(3) :: rankone
double precision, dimension(3,1) :: ranktwo
double precision, dimension(3) :: output
rankone = 1
ranktwo = 2
output = rankone + ranktwo
print *, 'output: ', output
end program main
Matlab中是否有类似于squere
的函数,用于从变量ranktwo
中删除单态维度。我在找像这样的东西
output = rankone + squeeze(ranktwo)
如果没有,此设置是否有解决方法
关于这个问题,不同版本的Fortran之间有什么不同吗?试试这个
output = rankone + reshape(ranktwo,[3])
然后查看重塑
的文档以了解发生了什么。你也可以写
output = rankone + ranktwo(:,1)
它从ranktwo
中分割出一个1D数组。根据我的经验重塑通常会导致数组复制,因此可能会有内存使用效率参数来首选第二个版本
不,关于这个问题,Fortran版本之间没有区别,3x1数组与长度为3的1D数组的形状不同。试试这个
output = rankone + reshape(ranktwo,[3])
然后查看重塑
的文档以了解发生了什么。你也可以写
output = rankone + ranktwo(:,1)
它从ranktwo
中分割出一个1D数组。根据我的经验重塑通常会导致数组复制,因此可能会有内存使用效率参数来首选第二个版本
不,关于这个问题,Fortran版本之间没有差异,3x1数组与长度为3的1D数组的形状不同。或者,在F2003中,您可以用秩2指针指向秩1数组,如下所示:
program main
double precision, dimension(3), target :: rankone
double precision, dimension(3,1) :: ranktwo
double precision, dimension(3,1) :: output
double precision, pointer :: pp(:,:)
rankone(:) = 1
ranktwo(:,:) = 2
pp(1:size(rankone),1:1) => rankone
output = pp + ranktwo
print *, 'output: ', output
end program main
如果我没记错的话,另一个方向(用秩1指针指向秩2数组)仅在Fortran 2008中有效。或者,在F2003中,您可以用秩2指针指向秩1数组,如下所示:
program main
double precision, dimension(3), target :: rankone
double precision, dimension(3,1) :: ranktwo
double precision, dimension(3,1) :: output
double precision, pointer :: pp(:,:)
rankone(:) = 1
ranktwo(:,:) = 2
pp(1:size(rankone),1:1) => rankone
output = pp + ranktwo
print *, 'output: ', output
end program main
如果我没记错的话,另一个方向(用秩1指针指向秩2数组)只在Fortran 2008中有效。谢谢。你的第二个建议对我没有帮助,因为在我实际遇到这个问题的代码中,秩2的值是由函数返回的。今天,内存使用问题不再是一个真正的问题。你认为使用整形也会降低运行速度吗?我认为整形对运行时间的影响一点都不重要,你所测量的就是你需要关心的。谢谢。你的第二个建议对我没有帮助,因为在我实际遇到这个问题的代码中,秩2的值是由函数返回的。今天,内存使用问题不再是一个真正的问题。你认为使用整形也会降低运行速度吗?我认为整形对运行时间的影响一点都不重要,你所测量的就是你需要关心的一切。但是您已经将
输出更改为秩2,在原始版本中为秩1。可以使用秩1指针指向秩2数组的秩1切片。是的,确实,这是一个好的点。最初的帖子有点不清楚应该实现什么,允许改变什么。但是您已经将输出更改为秩2,在原始版本中为秩1。可以使用秩1指针指向秩2数组的秩1切片。是的,确实,这是一个好的点。最初的帖子有点不清楚应该实现什么以及允许改变什么。