我经常使用python来处理数据目录.最近,我注意到列表的默认顺序已经变为几乎荒谬的东西.例如,如果我在包含以下子目录的当前目录中:run01,run02,... run19,run20,然后我从以下命令生成一个列表:
dir = os.listdir(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
然后我通常按此顺序获得一个列表:
dir = ['run01', 'run18', 'run14', 'run13', 'run12', 'run11', 'run08', ... ]
Run Code Online (Sandbox Code Playgroud)
等等.订单曾经是字母数字.但是这个新订单现在已经和我保持了一段时间.
什么是确定这些列表的(显示)顺序?
我想在python中滚动一个2D numpy,除了我想用零填充末尾而不是滚动数据就好像它是周期性的.
具体来说,以下代码
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]])
np.roll(x, 1, axis=1)
Run Code Online (Sandbox Code Playgroud)
回报
array([[3, 1, 2],[6, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
但我更喜欢的是
array([[0, 1, 2], [0, 4, 5]])
Run Code Online (Sandbox Code Playgroud)
我可以用一些笨拙的修饰做到这一点,但我希望有一种方法可以使用快速内置命令.
谢谢
我想执行以下操作:
a=max(a,3)
b=min(b,3)
Run Code Online (Sandbox Code Playgroud)
但有时a
也b
可能None
.
我很高兴地发现,如果max
它很好地工作,给出我所需的结果3
,但如果b
是None
,b
仍然None
...
任何人都可以想到一个优雅的小技巧min
,如果其中一个参数在None中,则返回数字?
我正在将csh脚本转换为python脚本.该脚本调用内存密集型可执行文件,需要非常大的堆栈,因此csh脚本将stacksize设置为unlimited:
limit stacksize unlimited
Run Code Online (Sandbox Code Playgroud)
当我尝试在python中重现这个脚本时,我以一种非常天真的方式执行它们os.system
,例如:
os.system('some_executable')
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过无限制的堆栈大小来告诉操作系统运行这些可执行文件.有没有办法为python脚本中的调用指定stacksize?是否有一些我应该使用的低级系统调用?是否有一个控制它的模块(类似于shutil)?
有没有办法让python脚本加载和使用环境模块?os.system('module load xxx')
因为它在子shell中执行它们不起作用(至少,我认为这是正在发生的事情).
让我们假设以下简单的对象:
class Mock:
def __init__(self, name, age):
self.name = name
self.age = age
Run Code Online (Sandbox Code Playgroud)
然后我有一个包含这样的对象的列表:
myList = [Mock("Dan", 34), Mock("Jack", 30), Mock("Oli", 23)...]
Run Code Online (Sandbox Code Playgroud)
是否有一些内置功能,我可以获得年龄为30岁的所有模拟?当然,我可以对自己进行迭代并比较它们的年龄,但类似于
find(myList, age=30)
Run Code Online (Sandbox Code Playgroud)
会好的.有类似的东西吗?
我一直在运行Python脚本,它们会调用一些函数,比如F1(x)和F2(x),看起来有点像这样:
x = LoadData()
for j in range(N):
y = F1(x[j])
z[j] = F2(y)
del y
SaveData(z)
Run Code Online (Sandbox Code Playgroud)
如果我保持"del y"线,性能会快得多.但我不明白为什么这是真的.如果我不使用"del y",那么我很快就会耗尽RAM而不得不求助于虚拟内存,而且一切都在慢慢爬行.如果我使用"del y"购买,那么我反复刷新并为y重新分配内存.我想做的是作为静态内存,并在每次F1(x)调用时重用内存.但据我所知,这不是正在发生的事情.
此外,不确定它是否相关,但我的数据包括numpy数组.
目前是否可以覆盖Fortran中的结构构造函数?我已经看到过像这样的提议示例(例如在Fortran 2003规范中):
module mymod
type mytype
integer :: x
! Other stuff
end type
interface mytype
module procedure init_mytype
end interface
contains
type(mytype) function init_mytype(i)
integer, intent(in) :: i
if(i > 0) then
init_mytype%x = 1
else
init_mytype%x = 2
end if
end function
end
program test
use mymod
type(mytype) :: x
x = mytype(0)
end program
Run Code Online (Sandbox Code Playgroud)
由于冗余变量名称(例如,'mytype'的错误:DERIVED属性与(1)处的PROCEDURE属性冲突),这基本上会产生一堆错误.fortran 2003示例的逐字副本会产生类似的错误.我在gfortran 4.4,ifort 10.1和11.1中尝试了这个,它们都产生了相同的错误.
我的问题:这只是2003年fortran的一个未实现的功能吗?或者我是否错误地实施了这个?
编辑:我遇到过一个错误报告和gfortran关于这个问题的公告补丁.但是,我尝试使用11月版的gcc46没有运气和类似的错误.
编辑2:上述代码似乎可以使用英特尔Fortran 12.1.0.
我使用了一些Android代码来覆盖EditText字段中的"完成"按钮:
myEditField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mySubroutine();
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
激活该字段会调出键盘,按"完成"会成功评估mySubroutine().但是,当我按"完成"时,键盘不再消失.如何将此默认行为恢复到例程?
我想对这个NumPy操作进行矢量化:
for j in range(yt):
for i in range(xt):
y[j, i] = x[idx[j, i], j, i]
Run Code Online (Sandbox Code Playgroud)
其中idx
包含x
切片的axis-0索引.有一些简单的方法可以做到这一点吗?
我正在尝试使用我的OS X桌面设置内部git服务器(主要作为测试用例).当涉及SSH密钥时,一切正常,但我目前正在尝试使用git-daemon进行只读克隆.如果我在终端中启动git-daemon:
sudo -u git git-daemon --basepath=/Users/git/repos/ --export-all
Run Code Online (Sandbox Code Playgroud)
然后一切正常,例如
git clone git://localhost/My_Project.git
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用launchd进行设置时,它会拒绝所有请求.我正在使用这个plist文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>git</string>
<key>UserName</key>
<string>git</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/path/to/git-daemon</string>
<string>--base-path=/Users/git/repos/</string>
<string>--export-all</string>
</array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
如果我尝试克隆My_Project,则会收到以下错误:
Cloning into My_Project...
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是,我相信这曾经有用,所以问题可能与我的plist文件或者launchd的使用关系不大,而且更多的是做任何可能已经改变的网络设置.任何建议将不胜感激.
抱歉,如果这更像是一个系统管理员问题,但我认为开发人员可能会有一些经验.
更新:如果存在repo,控制台将报告以下错误:
git[431]
error: cannot run upload-pack: No such file or directory
Run Code Online (Sandbox Code Playgroud)