Pythonnumpy.roll函数沿轴滚动array.示例:

from numpy import roll, array
x = array([[1,0,2],[2,1,9],[5,5,1]])
print(roll(x, 1, axis=0))

将矩阵x变换为

array([[5, 5, 1],
       [1, 0, 2],
       [2, 1, 9]])

我try 在Fortran中执行此操作,方法是分割一个矩阵行并将其附加到现有矩阵:

program myfun

implicit none
integer, parameter :: N=3
real, dimension(N,N) :: m
integer :: i, j

m = 0
do i = 1, N
    m(i, i) = 1.0
enddo
m(3,1) = 2
m(3,2) = 9
m(1,3) = 5
m(1,2) = 2
m(2,3) = 5

print *, '', [m(:,N), m]

end program myfun

这就产生了矩阵

[5, 5, 1]
[1, 0, 2]
[2, 1, 9]
[5, 5, 1]  <- need to remove this row (how?)

这是在Fortran中执行numpy.roll的最佳方式吗?如果是,我如何删除矩阵的最后一行?

推荐答案

如果我理解你问的是什么,cshift就是你想要的.下面是一个例子,你可以找到更多细节here

计划:

Program test_cshift

  Use iso_fortran_env, Only : stdout => output_unit
  
  Implicit None

  Integer, Dimension( 1:3, 1:3 ) :: m = Reshape( [ 1, 0, 2,   &
                                                   2, 1, 9,   &
                                                   5, 5, 1 ], &
                                                   Shape( m ) )

  Write( stdout, * ) 'Original'
  Write( stdout, '( 3( 3( i1, 1x ), / ) )' ) m
  Write( stdout, * ) 'After cshift'
  Write( stdout, '( 3( 3( i1, 1x ), / ) )' ) Cshift( m, -1, 2 )

End Program test_cshift

编译和链接:

ijb@ijb-Latitude-5410:~/work/stack$ gfortran --version
GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ijb@ijb-Latitude-5410:~/work/stack$ gfortran -Wall -Wextra -pedantic -fcheck=all -std=f2018 -O -g cshift.f90

测试:

ijb@ijb-Latitude-5410:~/work/stack$ ./a.out
 Original
1 0 2
2 1 9
5 5 1

 After cshift
5 5 1
1 0 2
2 1 9

ijb@ijb-Latitude-5410:~/work/stack$

Python相关问答推荐

如何销毁框架并使其在tkinter中看起来像以前的样子?

在上下文管理器中更改异常类型

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

通过优化空间在Python中的饼图中添加标签

如何计算两极打印机中 * 所有列 * 的出现次数?

根据不同列的值在收件箱中移动数据

如何使用pandasDataFrames和scipy高度优化相关性计算

如何比较numPy数组中的两个图像以获取它们不同的像素

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

如何使用数组的最小条目拆分数组

从spaCy的句子中提取日期

Asyncio:如何从子进程中读取stdout?

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

如何在Pyplot表中舍入值

为什么常规操作不以其就地对应操作为基础?

在matplotlib中使用不同大小的标记顶部添加批注

如何按row_id/row_number过滤数据帧

如何使用正则表达式修改toml文件中指定字段中的参数值

使用类型提示进行类型转换