小编val*_*rio的帖子

Numpy:loadtxt(),列数可变

我有一个制表符分隔值的文件,其中文件的前半部分有3列N行,后半部分有2列和M行.我需要将这样的文件转换为两个独立的数组:3xN和2xM.

例:

   6.7900209022264466       -3.8259897286289504        13.563976248832137     
   1.5334543760683907        12.723711617874176        1.5148291755004299     
   2.4282763900233522        9.1305022788201136       -3.1003673775485394     
  -6.5344717544805586E-002  -12.487743380186622        2.6928902187606480     
   8.9067951331740804        13.403331728374390      -0.58045132774289632     
  -11.842481592786449       -5.7083783211328551        1.9526760053685255     
  -10.240286781275808        13.204312088815593        4.4856524683466175     
  -4.6690658488407504       -6.2809313597959449        7.4378900284937082     
  -9.5874077836478282       -8.6799071183782903       -1.8203838010218165     
  0.62588896716878051       -5.4614995295716540        11.166650096421838     
           0        4173
           0        1998
           0         611
           0        8606
           1        6912
           1        9671
           1        7993
           1        8513
           2        5556
           2        4422
           2        3047
Run Code Online (Sandbox Code Playgroud)

我不能简单地loadtxt()用来读取这样的文件,因为这会导致错误ValueError: Wrong number of columns at line ...

有没有办法使用loadtxt()或类似的功能来读取这样的文件?

我想避免使用readlines()split()然后转换为float,因为这会使代码更慢(我认为......)和更长.我也尝试过pandas.read_csv(),但我需要一个数组作为输出.


更新:

现在,按照hpaulj的建议,我这样做是这样使用readlines() …

numpy

6
推荐指数
1
解决办法
4703
查看次数

Python:运行所有子目录中的脚本

我是Python新手,我正在用它来做一些数据分析。

我的问题如下:我有一个包含许多子目录的目录,每个子目录都包含大量数据文件。

我已经编写了一个 Python 脚本,当在这些子目录之一中执行时,该脚本会执行数据分析并将其写入输出文件。该脚本包含一些我称为 using 的 shell 命令os.system(),因此我必须“位于”子目录之一才能使其工作。

我怎样才能编写一个自动执行以下操作的函数:

  1. 移动到第一个子目录
  2. 执行脚本
  3. 返回上级目录并移动到下一个子目录

我想这可以通过某种方式来完成os.walk(),但我不太明白它是如何工作的。

PS 我知道这篇文章的存在,但它并没有解决我的问题。

PPS 也许我应该指出我的函数不将目录名称作为参数。其实这不需要争论。

python

5
推荐指数
1
解决办法
1万
查看次数

ipython:exit() 语句未按预期工作

我正在将脚本运行到 ipython (1.2.1) 中,如果不满足某个条件,我需要它停止。我尝试使用 exit() 语句,但它的行为不符合预期。

以我调用的以下脚本为例test.py

if(True):
    print('Error')
    exit()
print('Still here!')
Run Code Online (Sandbox Code Playgroud)

当我使用 运行它时python test.py,我得到:

$python test.py
Error
Run Code Online (Sandbox Code Playgroud)

然后按预期终止执行。

但是,如果我使用从 ipython 运行它run -i test.py,那么我会得到:

In [1]: run -i test.py
Error
Still here!
Run Code Online (Sandbox Code Playgroud)

最后终止 ipython 的执行。问题是,在这种情况下,第二个打印语句仍然被执行,而我需要在遇到 exit() 语句时立即终止脚本的执行。

为什么会发生这种情况,我怎样才能获得我想要的结果?(我正在运行 python 2.7.6)

python exit execution terminate ipython

5
推荐指数
1
解决办法
1967
查看次数

具有假定形状虚拟参数的过程必须具有显式接口

我对Fortran 90完全陌生,并且试图了解如何将数组传递给函数。我在网上浏览时,找不到足够清晰和简单的示例,因此决定在此处发布。

我希望函数能够在任何长度的数组上工作(数组的长度不应是函数的参数之一)。

我试图写一个简单的函数示例,该函数返回数组元素的总和:

function mysum(arr)
    implicit none
    real, dimension(:), intent(in) :: arr
    real :: mysum
    integer :: i,arrsize
    arrsize = size(arr)
    mysum=0.0
    do i=1,arrsize
        mysum=mysum+arr(i)
    enddo
end function mysum

program test
    implicit none
    real, dimension(4) :: a
    real :: mysum,a_sum
    call random_number(a)
    print *,a
    a_sum=mysum(a)
    print *,a_sum
end program
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,出现以下错误:

array_test.f90:17.14:

 real mysum,a_sum
           1
Error: Procedure 'mysum' at (1) with assumed-shape dummy argument 'arr' must have an explicit interface
Run Code Online (Sandbox Code Playgroud)

我的程序有什么问题?

fortran function fortran90

3
推荐指数
1
解决办法
2670
查看次数

numpy:对NxM数组的列(或行)进行操作

这可能是一个愚蠢的问题,但是我刚刚开始使用numpy,我必须弄清楚如何执行一些简单的操作。

假设我有2x3阵列

array([[1, 3, 5],
   [2, 4, 6]])
Run Code Online (Sandbox Code Playgroud)

我想在第一列上执行一些操作,例如对所有元素减去1以得到

array([[0, 3, 5],
   [1, 4, 6]])
Run Code Online (Sandbox Code Playgroud)

如何执行这样的操作?

python arrays numpy

0
推荐指数
1
解决办法
3551
查看次数

标签 统计

python ×3

numpy ×2

arrays ×1

execution ×1

exit ×1

fortran ×1

fortran90 ×1

function ×1

ipython ×1

terminate ×1