小编Vin*_* W.的帖子

带有数组的函数的PyCharm getitem警告

我从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)

python iterator numpy pycharm

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

Python,numpy,einsum乘以一堆矩阵

出于性能原因,

我很好奇是否有一种方法来叠加一堆矩阵的堆栈.我有一个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次迭代.

python arrays performance numpy multiplication

11
推荐指数
1
解决办法
1476
查看次数

在 mac os catalina 上调用 `run` 后 gdb 挂起

系统:

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)

macos fortran gdb macos-catalina

8
推荐指数
1
解决办法
1877
查看次数

PyQt5应用程序退出PyQt4应用程序不会出错

我使用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)

python qt pyqt pyqt4 pyqt5

7
推荐指数
1
解决办法
1813
查看次数

如何在没有控制台窗口的情况下在Windows上启动最近的Jupyter QtConsole

这个较旧的问题似乎已过时.

它曾经是(基于阅读git reposqtconsole问题跟踪器)你可以启动Jupyter QtConsole而不需要运行背景的控制台窗口:

pythonw -m jupyter qtconsole

但是,在最近的Jupyter版本中,这仍然会启动后台控制台窗口.

在此输入图像描述

我想知道是否有人知道如何在没有烦人的控制台窗口的情况下启动QtConsole.我知道你可以从Anaconda Navigator程序中做到这一点,但我不想启动一个程序,以便我可以启动另一个程序.我更喜欢有一个简单的批处理脚本甚至是python脚本,以便我可以使用"开始"菜单快捷方式启动

直接运行模块也不起作用:

pythonw -c "from qtconsole.qtconsoleapp import main; main()"

这仍然会启动一个新的控制台窗口,如图所示,所以我真的不知道这是否可能以某种直接的方式,或者如果Anaconda Navigator正在做一些黑魔法来实现这一点

python windows qtconsole anaconda jupyter

7
推荐指数
1
解决办法
1304
查看次数

pylint 为可调用的对象属性提供不可调用错误

不确定我是否做错了什么或者这是否是一个问题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)

在此输入图像描述

python pylint type-hinting

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

从numba vectorize获取多个返回值

我想知道是否有可能从使用numba.vectorize编译的函数中获取多个返回值.

我正在使用vectorize装饰器来获取一系列参数的函数,并执行迭代根查找例程然后返回解决方案.vectorize函数完美地工作,因为所有参数和返回的结果都是相同的维度.问题是,解决方案并不总是趋同.我想返回一个True/False数组,告诉我解决方案是否已收敛.

我意识到这可以通过guvectorize来实现,但是vectorize的标量语法很好,而且由于我的所有数组都是相同的维度,因此需要引入guvectorize似乎很愚蠢.有谁知道它是否可以从numba.vectorize编译函数返回2个或更多数组?

python numba

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

matplotlibrc rcParams 修改为 Jupyter 内联图

我已经看到这个问题出现了几次,但我认为随着 jupyter/ipython 的更新,这些信息会发生变化。我目前正在运行 python 3.5、jupyter(最新)和 matplotlib 2.0。
这些%matplotlib inline图具有在导入 matplotlibrc 文件后设置的自定义属性。其中最烦人的是该figure.facecolor属性设置为透明,这在复制/粘贴图时会造成严重破坏,因此我必须在笔记本中重置此属性。我似乎无法找到更改此属性的位置,或者是否可以在某处创建配置文件来更改这些特殊inline绘图设置

我的问题是,是否可以更改这些设置,如果可以,我该怎么做?

python matplotlib ipython jupyter

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

如何诊断Apache2.4服务错误7024错误的功能

系统:

  • Windows 10 x64(有一些限制的企业计算机)
  • 阿帕奇 2.4 64 位
  • Python 3.7.1 64 位
  • mod_wsgi(今天使用 python setup.py install 从 github 构建)

我正在努力在 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 之前,启动服务是成功的,所以在这样做之后就发生了这种情况,此时我还没有配置任何其他内容。

python apache mod-wsgi

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

在 fortran 中获取可变长度字符串列表的更好方法

经过大量挖掘,我已经为 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)

string fortran list

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

如何使用元组和 dict 解包制作 attrs 类但没有额外的方法

我刚开始使用attrsPython 模块,它非常漂亮(或者类似地,我们可以使用 Python 3.7 DataClasses)。我有一个常见的使用模式是让类成为参数值的容器。我喜欢分配参数时的标签,以及更清晰的属性样式引用值,但我也喜欢在将值存储在有序 dict 之类的东西中时有几个很好的功能:

  1. *像 atuple或 a一样解包list以输入函数参数
  2. ** 当需要或需要传递关键字时解压缩。

我可以通过在类中添加三个方法来实现这一切

@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)

python python-attrs python-dataclasses

2
推荐指数
1
解决办法
2330
查看次数

从工作表函数传递范围时获取单元格内部颜色失败

我正在尝试编写一个可以从单元格调用的简单函数,如果给定单元格的背景具有特定的背景颜色,则该函数将返回。

当从子例程调用时,此函数按预期工作,但从工作表调用时失败。在行

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)

excel vba

2
推荐指数
1
解决办法
1635
查看次数