小编ger*_*rit的帖子

Unicode下标和标识符中的上标,为什么Python会考虑XU ==Xᵘ==Xᵤ?

Python允许使用unicode标识符.我定义X? = 42,期待XUX?导致a NameError.但实际上,当我定义时X?,Python(默默地?)变成X?Xu,这让我觉得有些单调的事情要做.为什么会这样?

>>> X? = 42
>>> print((Xu, X?, X?))
(42, 42, 42)
Run Code Online (Sandbox Code Playgroud)

python unicode syntax identifier

12
推荐指数
1
解决办法
352
查看次数

如何在多列上屏蔽numpy结构化数组?

我有一个带有dtype的numpy结构化数组,例如:

A = numpy.empty(10, dtype=([('segment', '<i8'), ('material', '<i8'), ('rxN', '<i8')]))
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建一个面具,例如:

A[A['segment'] == 42] = ...
Run Code Online (Sandbox Code Playgroud)

有没有办法在多列上创建掩码?例如(我知道这不起作用,但我希望它能做到):

A[A['segment'] == 42 and A['material'] == 5] = ...
Run Code Online (Sandbox Code Playgroud)

python numpy mask masked-array

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

我什么时候可以传递一个文字:一个函数?

在什么情况下我可以将文字:传递给Matlab函数?我通过实验发现,有时,文字:作为字符串传递':',但在其他情况下,会引发错误.例如:

>> type writeargs

function writeargs(varargin)

disp(varargin);

end

>> writeargs(:)
Undefined variable writeargs.

>> writeargs(:, 1)
Undefined variable writeargs.

>> writeargs(:, 1, :)
    ':'    [1]    ':'

>> writeargs(:, :, :)
    ':'    ':'    ':'

>> writeargs(1, 2, :, 4, 5)
    [1]    [2]    ':'    [4]    [5]

>> writeargs(1, 2, :, end)
Error using writeargs
Too many output arguments.
Run Code Online (Sandbox Code Playgroud)

我的印象是,如果传递至少三个参数,则允许使用此语法.这似乎是武断的.这里的法律语法是什么?

编辑:评论要求用例.用例可以是我的参数将被用作切片或索引.在Python代码中,我遇到了将切片对象传递给方法的情况.一个用例是针对一个函数,例如受到这个答案的启发,其中一个小函数用于绕过Matlabs无法解释magic(5)(3, :),并且可以编写辅助函数并调用它paren(magic(5), 3, :).

syntax matlab slice

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

如何检查当前代码是否属于try-except-block的一部分?

我正在调试作为某种形式的插件框架一部分编写的函数。该函数似乎没有按照其应有的方式工作,我怀疑在堆栈的某个地方,有人正在捕获异常,或者引发(非常特殊或非常通用的)异常并测试会发生什么(但是如果它是吞了下去,它仍然没有告诉我在哪里)。我可以进入调试器并在每个堆栈级别检查源代码。是否有更直接的方法列出当前代码可能属于的任何try-except块,特别是任何此类块的try-part?

当然,这仅用于调试目的。

python debugging exception

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

压缩文件上有效的numpy.fromfile?

我有一些大的(甚至是大约10GB的压缩文件)文件,其中包含一个ASCII标头,然后原则上每个大约3MB的numpy.recarrays,我们称之为"事件".我的第一个方法看起来像这样:

f = gzip.GzipFile(filename)
f.read(10000) # fixed length ascii header
event_dtype = np.dtype([
        ('Id', '>u4'),                # simplified
        ('UnixTimeUTC', '>u4', 2), 
        ('Data', '>i2', (1600,1024) ) 
        ])
event = np.fromfile( f, dtype = event_dtype, count=1 )
Run Code Online (Sandbox Code Playgroud)

但是,这是不可能的,因为np.fromfile需要一个真正的FILE对象,因为它确实进行了低级别的调用(找到了一个相当旧的票据https://github.com/numpy/numpy/issues/1103).

据我了解,我必须这样做:

s = f.read( event_dtype.itemsize )
event = np.fromstring(s, dtype=event_dtype, count=1)
Run Code Online (Sandbox Code Playgroud)

是的,它有效!但这不是非常低效吗?是不是分配了内存,为每个事件收集垃圾?在我的笔记本电脑上,我达到了16个事件/秒,即~50MB/s

我想知道是否有人知道一个聪明的方法,分配mem一次然后让numpy直接读入该mem.

顺便说一句.我是一名物理学家,所以...还是这个行业的新手.

python zip numpy fromfile

9
推荐指数
1
解决办法
1913
查看次数

为什么`'↊'.isnumeric()`false?

根据官方Unicode Consortium代码表,所有这些都是数字:

?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?
?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?
?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?
?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?   ?
Run Code Online (Sandbox Code Playgroud)

但是,当我要求Python告诉我哪些是数字时,它们都是(偶数?)除了四个:

In [252]: print([k for k in "????????????????????????????????????????????????????????????" if not k.isnumeric()])
['?', '?', '?', …
Run Code Online (Sandbox Code Playgroud)

python unicode

9
推荐指数
1
解决办法
518
查看次数

S3FS python,凭证内联

我正在尝试使用 python s3fs 读取 S3 AWS 中的文件。

我找不到将凭证(访问密钥 + 秘密)放入 s3fs 代码的代码。

任何人都可以帮助我如何设置此信息以及 s3fs 代码。

import s3fs
fs = s3fs.S3FileSystem(anon=True)
Run Code Online (Sandbox Code Playgroud)

我目前使用的是 Windows 10。

python amazon-web-services python-s3fs

9
推荐指数
1
解决办法
7472
查看次数

setuptools-scm:当前版本而不是下一版本

我想用它setuptools-scm来控制我的包版本。我的setup.py

setuptools.setup(
...
    use_scm_version={'write_to': 'my-package/version.py'},
...
)

Run Code Online (Sandbox Code Playgroud)

v0.2目前我的仓库中有标签。我创建了新分支并添加了一些提交。当我运行python setup.py --version创建my-package/version.py文件时,我得到下一个标签v0.3而不是当前标签v0.2

$ SETUPTOOLS_SCM_DEBUG=1 python3 setup.py --version
...
cmd 'git describe --dirty --tags --long --match *.*'
out b'v0.2-1-gb13420a\n'
cmd 'git rev-parse --abbrev-ref HEAD'
out b'feature-version-system\n'
tag v0.2
tag 'v0.2' parsed to {'version': 'v0.2', 'prefix': '', 'suffix': ''}
version pre parse v0.2
version <Version('0.2')>
version v0.2 -> 0.2
scm version <ScmVersion 0.2 d=1 n=gb13420a d=False b=feature-version-system>
config {'version_scheme': 'guess-next-dev', 'local_scheme': …
Run Code Online (Sandbox Code Playgroud)

python git version-control setuptools setuptools-scm

9
推荐指数
2
解决办法
9753
查看次数

具有掩码数组的 xarray,同时保留整数数据类型

目前,我的代码大量使用具有多维数据类型的结构化掩码数组,其中包含数十个字段和数千字节的项目大小。看起来这xarray可能是一个很好的选择,但是当我尝试向它传递一个掩码数组时,它会将其数据类型更改为 float:

In [137]: x = arange(30, dtype="i1").reshape(3, 10)

In [138]: xr.Dataset({"count": (["x", "y"], ma.masked_where(x%5>3, x))}, coords={"x": range(3), "y":
     ...: range(10)})
Out[138]:
<xarray.Dataset>
Dimensions:  (x: 3, y: 10)
Coordinates:
  * y        (y) int64 0 1 2 3 4 5 6 7 8 9
  * x        (x) int64 0 1 2
Data variables:
    count    (x, y) float64 0.0 1.0 2.0 3.0 nan 5.0 6.0 7.0 8.0 nan 10.0 ...
Run Code Online (Sandbox Code Playgroud)

这对我来说是不可取的,因为(1)我的数据集的内存消耗将会爆炸(它已经很大),并且(2)我的许多整数数据类型都是位字段,不能表示为浮点数。尽管int32位域可以无损地表示为 a float64,但来回比较丑陋且容易出错。

是否可以xarray.Dataset …

python python-xarray masked-array

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

我如何使用importlib.LazyLoader?

在我的模块中,我有几个依赖于具有较长启动时间的外部模块的功能.我该怎么用LazyLoader?如果我有

import veggies
Run Code Online (Sandbox Code Playgroud)

要么

import veggies.brussels.sprouts
Run Code Online (Sandbox Code Playgroud)

要么

from veggies.brussels import sprouts
Run Code Online (Sandbox Code Playgroud)

如何替换这些语句以便LazyLoader模块内容的执行被推迟到需要时?

从文档中可以立即明白如何使用它.没有示例,并且nullege代码搜索仅提供Python本身包含的单元测试.

python python-module python-import python-importlib

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