我有一个制表符分隔值的文件,其中文件的前半部分有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() …
我是Python新手,我正在用它来做一些数据分析。
我的问题如下:我有一个包含许多子目录的目录,每个子目录都包含大量数据文件。
我已经编写了一个 Python 脚本,当在这些子目录之一中执行时,该脚本会执行数据分析并将其写入输出文件。该脚本包含一些我称为 using 的 shell 命令os.system(),因此我必须“位于”子目录之一才能使其工作。
我怎样才能编写一个自动执行以下操作的函数:
我想这可以通过某种方式来完成os.walk(),但我不太明白它是如何工作的。
PS 我知道这篇文章的存在,但它并没有解决我的问题。
PPS 也许我应该指出我的函数不将目录名称作为参数。其实这不需要争论。
我正在将脚本运行到 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)
我对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)
我的程序有什么问题?
这可能是一个愚蠢的问题,但是我刚刚开始使用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)
如何执行这样的操作?