我从PyCharm收到代码检查警告.我理解逻辑,但我不清楚修复它的适当方法.假设我有以下示例函数:
def get_ydata(xdata):
ydata = xdata ** 2
for i in range(len(ydata)):
print ydata[i]
return ydata
Run Code Online (Sandbox Code Playgroud)
我得到2个警告:
>> Expected type 'Sized', got 'int' instead (at line 3)
>> Class 'int' does not define '__getitem__', so the '[]' operator cannot be used on its instances (at line 4)
Run Code Online (Sandbox Code Playgroud)
该函数的目的当然是解析一个numpy数组的xdata.但PyCharm不知道,所以没有任何进一步的指示假设xdata(因此也是ydata)是一个整数.
解决此警告的适当方法是什么?我应该注意,添加类型检查行将修复警告.这是最佳解决方案吗?例如:
if not type(ydata) is np.ndarray:
ydata = np.array(ydata)
Run Code Online (Sandbox Code Playgroud)
最后,添加Sphinx文档字符串信息似乎对警告没有任何影响.(当xdata指定为str时,警告仍会看到'int').同时迭代y直接导致以下错误:
for y in ydata:
...
>> Expected 'collections.Iterable', got 'int' instead
Run Code Online (Sandbox Code Playgroud) 出于性能原因,
我很好奇是否有一种方法来叠加一堆矩阵的堆栈.我有一个4-D阵列(500,201,2,2).它基本上是500长度的(201,2,2)矩阵堆栈,对于500中的每一个,我想用einsum乘以相邻的矩阵,得到另一个(201,2,2)矩阵.
我只在最后的[2x2]矩阵上进行矩阵乘法.由于我的解释已经脱轨,我只会展示我现在正在做的事情,以及"减少"等效物以及为什么它没有帮助(因为它的计算速度相同).优选地,这将是一个numpy单行,但我不知道那是什么,或者即使它是可能的.
Arr = rand(500,201,2,2)
def loopMult(Arr):
ArrMult = Arr[0]
for i in range(1,len(Arr)):
ArrMult = np.einsum('fij,fjk->fik', ArrMult, Arr[i])
return ArrMult
def myeinsum(A1, A2):
return np.einsum('fij,fjk->fik', A1, A2)
A1 = loopMult(Arr)
A2 = reduce(myeinsum, Arr)
print np.all(A1 == A2)
print shape(A1); print shape(A2)
%timeit loopMult(Arr)
%timeit reduce(myeinsum, Arr)
Run Code Online (Sandbox Code Playgroud)
True
(201, 2, 2)
(201, 2, 2)
10 loops, best of 3: 34.8 ms per loop
10 loops, best of 3: 35.2 ms per loop
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.事情是有用的,但是当我不得不在一大堆参数上迭代时,代码往往需要很长时间,而我想知道是否有办法避免循环中的500次迭代.
系统:
mac osx catalina (10.15.5)
gfortran 9.3.0 (from homebrew)
gdb 9.2 (from homebrew)
Run Code Online (Sandbox Code Playgroud)
经历并遵循以下说明:https : //sourceware.org/gdb/wiki/PermissionsDarwin
试图调试这个程序只是为了学习:
! test.f90
program main
integer :: val
val = 1
print *, val
val = 2
print *, val
end program main
Run Code Online (Sandbox Code Playgroud)
编译:
gfortran test.f90 -Og -g -o test
Run Code Online (Sandbox Code Playgroud)
然后在终端
~/Coding/gdb
> ./test
1
2
~/Coding/gdb $
> gdb test
GNU gdb (GDB) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is …Run Code Online (Sandbox Code Playgroud) 我使用PyQt4开发了几个星期的科学应用程序,并决定切换到PyQt5.除了一些要解决的问题之外,有一件事令我困惑,我不确定它是否有预期的行为.
当使用PyQt4:如果我有一个python错误(AttributeError,FileNotFoundError或其他),错误消息将打印到python控制台,但我可以继续使用PyQt4 gui应用程序
当使用PyQt5时,当我有一个python错误时,整个应用程序关闭我.这是一个设置,还是这个预期的行为?这可能是灾难性的,如果有错误,我可以保存我已经获得的数据,但现在应用程序将在没有警告的情况下关闭.
这是一个演示行为的示例.此脚本打开一个小部件,其中包含一个用于激活文件对话框的按钮.如果选择了有效文件,代码将把filepointer对象打印到命令行.如果由于用户点击取消而没有选择文件,则不处理该情况并且python尝试打开具有路径''的文件.在这个PyQt4和PyQt5版本中抛出相同的python错误:
FileNotFoundError: [Errno 2] No such file or directory: ''
Run Code Online (Sandbox Code Playgroud)
但是,PyQt4版本将打开窗口小部件,用户可以继续,而PyQt5版本关闭,退出代码为1.
这是示例代码,由以下代码执行:"python script.py"
import sys
# from PyQt4 import QtGui as qt
# from PyQt4.QtCore import PYQT_VERSION_STR
from PyQt5 import QtWidgets as qt
from PyQt5.QtCore import PYQT_VERSION_STR
def open_a_file():
fname = qt.QFileDialog.getOpenFileName()
if PYQT_VERSION_STR[0] == '4':
f = open(fname, 'r')
print(f)
else:
f = open(fname[0], 'r')
print(f)
f.close()
if __name__ == '__main__':
app = qt.QApplication(sys.argv)
w = qt.QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('PyQt 4 v 5') …Run Code Online (Sandbox Code Playgroud) 这个较旧的问题似乎已过时.
它曾经是(基于阅读git repos和qtconsole问题跟踪器)你可以启动Jupyter QtConsole而不需要运行背景的控制台窗口:
pythonw -m jupyter qtconsole
但是,在最近的Jupyter版本中,这仍然会启动后台控制台窗口.
我想知道是否有人知道如何在没有烦人的控制台窗口的情况下启动QtConsole.我知道你可以从Anaconda Navigator程序中做到这一点,但我不想启动一个程序,以便我可以启动另一个程序.我更喜欢有一个简单的批处理脚本甚至是python脚本,以便我可以使用"开始"菜单快捷方式启动
直接运行模块也不起作用:
pythonw -c "from qtconsole.qtconsoleapp import main; main()"
这仍然会启动一个新的控制台窗口,如图所示,所以我真的不知道这是否可能以某种直接的方式,或者如果Anaconda Navigator正在做一些黑魔法来实现这一点
不确定我是否做错了什么或者这是否是一个问题pylint。在下面的代码中,我收到一个self.type无法调用的linting 错误E1102。
虽然我可以忽略它并继续工作,但似乎这种事情应该很容易解决......只是不知道如何解决它。
from typing import Callable
class Thing:
def __init__(self, thing_type: Callable):
self._type = thing_type
self._value = None
@property
def type(self) -> Callable:
return self._type
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = self.type(value)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能从使用numba.vectorize编译的函数中获取多个返回值.
我正在使用vectorize装饰器来获取一系列参数的函数,并执行迭代根查找例程然后返回解决方案.vectorize函数完美地工作,因为所有参数和返回的结果都是相同的维度.问题是,解决方案并不总是趋同.我想返回一个True/False数组,告诉我解决方案是否已收敛.
我意识到这可以通过guvectorize来实现,但是vectorize的标量语法很好,而且由于我的所有数组都是相同的维度,因此需要引入guvectorize似乎很愚蠢.有谁知道它是否可以从numba.vectorize编译函数返回2个或更多数组?
我已经看到这个问题出现了几次,但我认为随着 jupyter/ipython 的更新,这些信息会发生变化。我目前正在运行 python 3.5、jupyter(最新)和 matplotlib 2.0。
这些%matplotlib inline图具有在导入 matplotlibrc 文件后设置的自定义属性。其中最烦人的是该figure.facecolor属性设置为透明,这在复制/粘贴图时会造成严重破坏,因此我必须在笔记本中重置此属性。我似乎无法找到更改此属性的位置,或者是否可以在某处创建配置文件来更改这些特殊inline绘图设置
我的问题是,是否可以更改这些设置,如果可以,我该怎么做?
系统:
我正在努力在 Windows 计算机上使用 Python 获取 Apache 服务器,并且我已正确配置服务器,以便让mod_wsig 文档Hello World!中的示例正常工作。
如果我只是启动C:\Apache24\bin\httpd.exe,这会起作用,我会在http://localhost:5000/看到 Hello World
然后我想让它作为服务运行,所以我调用
httpd.exe -k install
在 ApacheMonitor 中,我启动了新的 Apache2.4 服务,但出现启动失败错误。在 Windows 系统事件日志中,它显示Event ID: 7024一个特定于服务的错误:Incorrect function。
当我运行时httpd.exe -k start -n "Apache2.4" -t它说Syntax OK
我找不到有关服务错误的更多信息。文件中没有任何内容error.log,我不知道还能在哪里查看,我要求提供有关如何诊断此问题的更多信息。
在我开始配置 Apache 使用 mod_wsgi 之前,启动服务是成功的,所以在这样做之后就发生了这种情况,此时我还没有配置任何其他内容。
经过大量挖掘,我已经为 Fortran 中的可变长度字符串列表制定了一个家庭酿造方案。它实际上是一个自定义类型的数组,只有一个成员属性,它是一个可变长度的字符串。语法有点麻烦,我想知道是否有我找不到的更好的方法。
这是我所拥有的:
! scratch.f90
module string_list
type t_string
character(len=:), allocatable :: s
end type
end module
program main
use string_list
implicit none
integer i
type(t_string), allocatable :: list(:)
allocate(list(2))
list(1)%s = "hi my name is"
list(2)%s = "slim shady"
do i=1,2
print *, len(list(i)%s)
end do
end program
Run Code Online (Sandbox Code Playgroud)
编译 gfortran scratch.f90 -o scratch
然后:
> ./scratch
13
10
Run Code Online (Sandbox Code Playgroud) 我刚开始使用attrsPython 模块,它非常漂亮(或者类似地,我们可以使用 Python 3.7 DataClasses)。我有一个常见的使用模式是让类成为参数值的容器。我喜欢分配参数时的标签,以及更清晰的属性样式引用值,但我也喜欢在将值存储在有序 dict 之类的东西中时有几个很好的功能:
*像 atuple或 a一样解包list以输入函数参数** 当需要或需要传递关键字时解压缩。我可以通过在类中添加三个方法来实现这一切
@attr.s
class DataParameters:
A: float = attr.ib()
alpha: float = attr.ib()
c: float = attr.ib()
k: float = attr.ib()
M_s: float = attr.ib()
def keys(self):
return 'A', 'alpha', 'c', 'k', 'M_s'
def __getitem__(self, key):
return getattr(self, key)
def __iter__(self):
return (getattr(self, x) for x in self.keys())
Run Code Online (Sandbox Code Playgroud)
然后我可以使用这样的类:
params = DataParameters(1, 2, 3, 4, 5)
result1 = function1(100, 200, *params, 300) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个可以从单元格调用的简单函数,如果给定单元格的背景具有特定的背景颜色,则该函数将返回。
当从子例程调用时,此函数按预期工作,但从工作表调用时失败。在行
IntColor = Cell.DisplayFormat.Interior.Color
Run Code Online (Sandbox Code Playgroud)
这是全部代码
Option Explicit
Public Function GetCellRGB(Rng As Range) As Integer()
Dim Result(1 To 3) As Integer
Dim Cell As Range
Set Cell = Rng.Cells(1, 1)
Dim IntColor As Integer
' when called from worksheet, function exits here with a #VALUE error
IntColor = Cell.DisplayFormat.Interior.Color
Result(1) = IntColor Mod 256 ' red
Result(2) = IntColor \ 256 Mod 256 ' green
Result(3) = IntColor \ 65536 Mod 256 ' blue
GetCellRGB = Result
End Function
Public …Run Code Online (Sandbox Code Playgroud) python ×9
fortran ×2
jupyter ×2
numpy ×2
anaconda ×1
apache ×1
arrays ×1
excel ×1
gdb ×1
ipython ×1
iterator ×1
list ×1
macos ×1
matplotlib ×1
mod-wsgi ×1
numba ×1
performance ×1
pycharm ×1
pylint ×1
pyqt ×1
pyqt4 ×1
pyqt5 ×1
python-attrs ×1
qt ×1
qtconsole ×1
string ×1
type-hinting ×1
vba ×1
windows ×1