修复此ImportError错误的正确方法是什么?
我有以下目录结构:
/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo
Run Code Online (Sandbox Code Playgroud)
我在目录中
/home/bodacydo/work/project
Run Code Online (Sandbox Code Playgroud)
现在,如果我输入
python ./programs/my_python_program.py
Run Code Online (Sandbox Code Playgroud)
我立即得到了
ImportError: No module named foo.tasks
Run Code Online (Sandbox Code Playgroud)
该./programs/my_python_program.py包含以下行:
from foo.tasks import my_function
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么python不会找到./foo/tasks.py它 - 它就在那里.
如果我从Python shell中执行它,那么它可以工作:
python
>>> from foo.tasks import my_function
Run Code Online (Sandbox Code Playgroud)
如果我通过python ./programs/my_python_program.py脚本调用它,它只能起作用.
精简版
我最近遇到了一些Python代码,其中函数的返回类型PyObject在文档中指定.什么是PyObject?
详细版本
我不是C/C++程序员,但是当我遇到PyObject上面链接的文档时,Google告诉我这PyObject是一个使用Python/C API定义的Python对象.具体来说,API文档定义PyObject如下:
所有对象类型都是此类型的扩展.这是一种类型,其中包含Python将对象指针视为对象所需的信息.在正常的"发布"版本中,它仅包含对象的引用计数和指向相应类型对象的指针.它对应于PyObject_HEAD宏扩展定义的字段.
坦率地说,我并不完全理解这一点,或者它是否回答了我的基本问题,但它并没有让我觉得将PyObject一个对象视为一个完整的Python对象显然是错误的.另一方面,也许从技术上来说,PyObject必须使用Python/C API将该类型创建为标准Python的扩展.例如,是一个整数a PyObject?
可能相关的链接
http://docs.scipy.org/doc/numpy/reference/c-api.types-and-structures.html
我创建了一个QDialog实例,在'x'(关闭)按钮的左边我也有'?' 按钮.我如何禁用'?' ?
我尝试在Python中执行此sqlite3查询.我将代码减少到最小,sqlite.connect等工作.
column = 'Pron_1_Pers_Sg'
goal = 'gender'
constrain = 'Mann'
with con:
cur = con.cursor()
cur.execute("SELECT ? FROM Data where ?=?", (column, goal, constrain))
con.commit()
rows = cur.fetchall()
for element in rows:
values.append(element)
Run Code Online (Sandbox Code Playgroud)
这将返回一个空列表.如果我对字符串进行硬编码,它就可以工作并返回值.
其中numpy.allclose()有两个容差因子用于确定两个阵列是否足够接近以算作相同。有相对宽容rtol和绝对宽容atol。来自文档:
numpy.allclose(a, b, rtol=1e-05, atol=1e-08)
Run Code Online (Sandbox Code Playgroud)
还来自文档:
如果以下等式按元素为 True,则 allclose 返回 True。
绝对(a - b) <= (atol + rtol * 绝对(b))
从数学上我理解这一点,但我对 的意义感到困惑rtol。为什么不只使用单个容差值tol,|a-b| < tol然后返回False?rtol显然,按照上面的等式,我可以通过设置为零来手动完成此操作,从而使一切对称。对称破缺rtol因子有什么意义?
相关问题
allclose() 是如何工作的?
短版(tl; dr)
我正在学习PySide,大多数在线教程都super用来初始化UI元素.这是重要的(即,更具可扩展性),还是品味问题?
澄清:当我在详细版本中更清楚时,这不是另一个通知线程,询问何时使用super(这已经在之前完成).相反,考虑到使用PySide教程的数量super,而不是<class>.__init__,我想如果用弄清楚super是PySide应用程序的标准?如果是这样,是因为super在使用PySide/PyQt时需要特别提到的(涉及解决继承问题)?或者这是品味问题.
详细版本
我是Python的新手,目前正在使用Zets教程学习PySide(http://zetcode.com/gui/pysidetutorial/firstprograms/).本教程的第二个示例包括:
from PySide import QtGui
class Example(QtGui.QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(300,300,250,150)
self.setWindowTitle("PySide 101: Window the First!")
self.show()
app=QtGui.QApplication(sys.argv)
ex=Example()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我从未使用过super.因此,我重写了上面的代码,成功地替换super了父类的更标准的显式调用:
QtGui.QWidget.__init__(self)
Run Code Online (Sandbox Code Playgroud)
但是,当我在网上搜索PySide教程时(例如,http://qt-project.org/wiki/PySide-Newbie-Tutorials ),它们都包括调用super.我的问题是:我应该super用于PySide脚本吗?
看来,super当你有继承的钻石,它倾向于解决多重继承的情况下,以合理的方式似乎是最有帮助的.是否super与PySide一起使用,因为这些钻石的案例占优势,我会面对更现实的复杂例子?[编辑:否:请参阅下面的答案.]
我为什么要问?为什么不直接使用super并完成它?
我在问,因为我用来学习Python的书(学习Python,由Lutz撰写)花了20多页关于这个主题super,并明确告诫不要使用它.他建议新的Python用户在使用它之前采用更传统,更明确的路线(例如,参见第832页,学习Python的第1041-1064页,第5版).他基本上将它描绘成一种非剧性的,神秘的,很少需要的新风格,刚开始时你应该非常谨慎地对待它,并认为它被有经验的用户过度使用.
此外,查看两个主要的PySide/PyQt项目(Spyder和pyqtgraph)的源代码,两者都没有使用super.One(Spyder)明确告诉贡献者出于兼容性原因而避免使用它(http://code.google.com/p/spyderlib/wiki/NoteForContributors). …
我正在构建接收器操作特性(ROC)曲线,以使用曲线下面积(AUC)评估分类器(更多详细信息,在帖子末尾).不幸的是,曲线上的点通常低于对角线.例如,我最终得到的图形看起来像这里的图形(蓝色的ROC曲线,灰色的标识线):

第三点(0.3,0.2)低于对角线.要计算AUC,我想修复这些顽抗点.
对于曲线上的点(fp,tp),执行此操作的标准方法是将其替换为点(1-fp,1-tp),这相当于交换分类器的预测.例如,在我们的例子中,我们麻烦的点A(0.3,0.2)变为B点(0.7,0.8),我在上面链接的图像中用红色表示.
就我的参考资料来说,这与处理这个问题有关.问题是,如果将新点添加到新的ROC中(并删除坏点),最终会得到如图所示的非单调ROC曲线(红色是新的ROC曲线,蓝色虚线是旧的):

在这里,我被卡住了.如何修复此ROC曲线?
我是否需要重新运行我的分类器与数据或类以某种方式转换为考虑到这种奇怪的行为?我查看了一篇相关的论文,但如果我没有弄错的话,它似乎正在解决一个与此不同的问题.
根据一些细节:我仍然拥有所有原始阈值,fp值和tp值(以及每个数据点的原始分类器的输出,输出只是从0到1的标量,这是一个概率估计班级成员).我在matlab中以perfcurve函数开始这样做.
我正在尝试制作一个QListWidget,其中每个项目都是一个包含文本和按钮的简单小部件.我使用以下内容:
itemN = QtGui.QListWidgetItem()
#Create widget
widget = QtGui.QWidget()
widgetText = QtGui.QLabel("I love PyQt!")
widgetButton = QtGui.QPushButton("Push Me")
widgetLayout = QtGui.QHBoxLayout()
widgetLayout.addWidget(widgetText)
widgetLayout.addWidget(widgetButton)
widgetLayout.addStretch()
widget.setLayout(widgetLayout)
#Add widget to QListWidget funList
funList.addItem(itemN)
funList.setItemWidget(itemN, widget)
Run Code Online (Sandbox Code Playgroud)
问题是,什么都没有出现.我得到一个空白行,我可以使用键盘导航,但它是空白的.当小部件只包含一个按钮时,它可以正常工作,因此不仅仅是按钮就是搞乱了.setItemWidget可以处理的小部件的复杂性是否有限制?也许我需要超越便利课程,如下面一些相关帖子所示?
相关文章
pyqt将一个小部件添加到QListWidget
请注意,上一篇文章的标题与我的相似,但似乎是一个相对较差的问题,关于QtDesigner的一个复杂的代码模板(混合了一些自定义的东西).目前尚不清楚这实际上是这个人应该问的问题.虽然标题看起来像是重复,但问题(我祈祷)却不是.
我会对这篇文章说些类似的话.
带有自定义项和自定义项窗口小部件的QListView/QListWidget
在QT中的QT点击问题中将自定义窗口小部件添加到QListWidget?
http://www.qtcentre.org/threads/8660-Drawing-a-widget-in-QItemDelegate-s-paint-method
目标
我的目标是让QTableWidget用户可以在内部拖放行.也就是说,用户可以拖放整行,将其在表中向上或向下移动到另外两行之间的不同位置.目标如下图所示:

我尝试了什么,发生了什么
一旦我填充了QTableWidget数据,我将其属性设置如下:
table.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
#select one row at a time
table.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
table.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
Run Code Online (Sandbox Code Playgroud)
类似的代码使得QListWidget行为很好:当你在内部移动一个项目时,它被删除在列表的两个元素之间,其余的项目以合理的方式排序,没有数据被覆盖(换句话说,视图就像上图,但它是一个列表).
相反,在使用上述代码修改的表中,事情无法按计划进行.下图显示了实际发生的情况:

在单词中:当行i被删除时,该行在表中变为空白.此外,如果我意外地将行i放到行j上(而不是两行之间的空间),则来自行i 的数据将替换行j中的数据.也就是说,在那个不幸的情况下,除了第i行变成空白之外,第j行被覆盖.
注意我也尝试添加,table.setDragDropOverwriteMode(False)但它没有改变行为.
前进的方向?
这个bug报告可能包括在C++中一个可能的解决方案:看来他们重新实现dropEvent了QTableWidget,但我不知道如何干净地移植到了Python.
相关内容:
快速版
如何在Matlab中控制三维条形图的x值和y值?
细节
假设我们有一个10 x 20的数据矩阵,我们使用它绘制它bar3,我们想要设置x值和y值.例如:
foodat = rand(10,20);
xVals = [5:14];
yVals = [-3:16];
bar3(xVals, foodat);
xlabel('x'); ylabel('y');
Run Code Online (Sandbox Code Playgroud)
有没有办法把它喂给yVals?否则,y轴始终默认为[1:N].
注意我不只是想用和更改标签.我需要更改轴上的实际值,因为我在同一个图中绘制了多个东西.仅仅改变(错误的)轴刻度标记的方式是不够的.所以这与这样的问题不同:XTickLabelYTickLabel
我尝试过的其他事情
当我尝试更改xvals时:
set(gca,'XTick', xVals)
set(gca,'YTick', yVals)
Run Code Online (Sandbox Code Playgroud)
这些值被接收,但实际上显示在错误的轴上,所以看起来x和y轴使用bar3切换.另外,由于条形图已经用错误的x值和y值绘制,所以为时已晚,因此我们最终会给空值给出刻度.
注意补充说
Matlab技术支持只是通过电子邮件通知我,让我知道用户贡献的功能scatterbar3,它以我想要的方式完成,其方式与接受的答案不同:
http://www.mathworks.com/matlabcentral/fileexchange/1420-scatterbar3