小编suv*_*ayu的帖子

交互式合并使用git和未跟踪的本地文件跟踪的文件

我使用了一些软件包(比如gitlab),你可以通过他们的git repo克隆来安装.它们通常带有一些config.example(在版本控制下),您将其复制到您自己的config文件中(不受版本控制或甚至被忽略.gitignore)并适应您的需要.

更新上游程序包时,例如更改显然只会反映在其中的配置文件选项config.example.

是否有一系列我缺少的git命令可以帮助我比较config.example新的命令的变化,upstream/HEAD甚至可能将它们交互式地合并到我的本地config文件中?

如果我可以获得类似于交互式补丁模式的东西,那将是非常棒的git add/commit --interactive.

git diff merge command-line interactive

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

如何从多个进程(可能来自不同的语言)使用 Apache Arrow IPC?

我不知道从哪里开始,所以寻找一些指导。我正在寻找一种在一个进程中创建一些数组/表,并可以从另一个进程访问(只读)的方法。

所以我创建了一个pyarrow.Table这样的:

a1 = pa.array(list(range(3)))
a2 = pa.array(["foo", "bar", "baz"])

a1
# <pyarrow.lib.Int64Array object at 0x7fd7c4510100>
# [
#   0,
#   1,
#   2
# ]

a2
# <pyarrow.lib.StringArray object at 0x7fd7c5d6fa00>
# [
#   "foo",
#   "bar",
#   "baz"
# ]

tbl = pa.Table.from_arrays([a1, a2], names=["num", "name"])

tbl
# pyarrow.Table
# num: int64
# name: string
# ----
# num: [[0,1,2]]
# name: [["foo","bar","baz"]]
Run Code Online (Sandbox Code Playgroud)

现在我如何从不同的进程中读取它?我以为我会使用multiprocessing.shared_memory.SharedMemory,但这不太有效:

shm = shared_memory.SharedMemory(name='pa_test', create=True, size=tbl.nbytes)
with pa.ipc.new_stream(shm.buf, tbl.schema) as out: …
Run Code Online (Sandbox Code Playgroud)

python ipc apache-arrow pyarrow

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

使用pyarrow从分区的镶木地板数据集中读取特定分区

我有一个有点大(~20 GB)分区数据集的镶木地板格式.我想从数据集中读取特定分区pyarrow.我以为我可以用这个完成这个pyarrow.parquet.ParquetDataset,但事实似乎并非如此.这是一个小例子来说明我想要的东西.

要创建随机数据集:

from collections import OrderedDict
from itertools import product, chain
from uuid import uuid4
import os
from glob import glob

import numpy as np
import pandas as pd
import pyarrow as pa
from pyarrow.parquet import ParquetWriter, ParquetDataset


def get_partitions(basepath, partitions):
    """Generate directory hierarchy for a paritioned dataset

    data
    ??? part1=foo
    ?   ??? part2=True
    ??? part1=foo
    ?   ??? part2=False
    ??? part1=bar
    ?   ??? part2=True
    ??? part1=bar
        ??? part2=False

    """
    path_tmpl = '/'.join(['{}={}'] * len(partitions))  # …
Run Code Online (Sandbox Code Playgroud)

python parquet apache-arrow pyarrow

6
推荐指数
2
解决办法
3333
查看次数

具有复杂步长的 numpy 数组切片意味着什么?

我在numpy 文档中遇到了一个示例,其中有一个切片内具有复杂步长的示例(请参阅第二个示例)。

从实验中,我可以看到它在做什么;它类似于np.linspace.

In [42]: np.r_[-1:1:1j]
Out[42]: array([-1.])

In [43]: np.r_[-1:1:2j]
Out[43]: array([-1.,  1.])

In [44]: np.r_[-1:1:3j]
Out[44]: array([-1.,  0.,  1.])

In [45]: np.r_[-1:1:4j]
Out[45]: array([-1.        , -0.33333333,  0.33333333,  1.        ])

In [46]: np.r_[-1:1:5j]
Out[46]: array([-1. , -0.5,  0. ,  0.5,  1. ])

In [47]: np.r_[-1:1:6j]
Out[47]: array([-1. , -0.6, -0.2,  0.2,  0.6,  1. ])

In [48]: np.all(np.r_[-1:1:6j] == np.linspace(-1, 1, 6))
Out[48]: True
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么这是预期的。如果我们从数学角度考虑,添加一个复数不应该改变数字的实部,而只会改变它的大小,而它只会随着每一步而增长!

我尝试查看索引文档:在用户指南中,以及API 文档;都没有提到切片中的复杂步长。

任何解释将不胜感激。

编辑:我没有彻底阅读文档,正如已接受的答案所指出的,行为如文档中所述。

arrays numpy python-3.x numpy-slicing

5
推荐指数
1
解决办法
658
查看次数

使用 pytest 和假设进行异常处理和测试

我正在编写带有假设的统计分析测试。ZeroDivisionError当传递非常稀疏的数据时,假设导致我在代码中出现 a 。所以我调整了我的代码来处理异常;就我而言,这意味着记录原因并重​​新引发异常。

try:
    val = calc(data)
except ZeroDivisionError:
    logger.error(f"check data: {data}, too sparse")
    raise
Run Code Online (Sandbox Code Playgroud)

我需要通过调用堆栈向上传递异常,因为顶级调用者需要知道存在异常,以便它可以将错误代码传递给外部调用者(REST API 请求)。

编辑:我也无法为val;分配合理的值 本质上我需要一个直方图,当我根据数据计算合理的箱宽度时会发生这种情况。显然,当数据稀疏时,这会失败。如果没有直方图,算法就无法继续进行。

现在我的问题是,在我的测试中,当我做这样的事情时:

@given(dataframe)
def test_my_calc(df):
    # code that executes the above code path
Run Code Online (Sandbox Code Playgroud)

hypothesis不断生成触发的失败示例ZeroDivisionError,并且我不知道如何忽略此异常。通常我会用 标记这样的测试pytest.mark.xfail(raises=ZeroDivisionError),但在这里我不能这样做,因为相同的测试可以通过良好的输入。

像这样的东西是理想的:

  1. 但是,对大多数输入照常继续测试
  2. ZeroDivisionError引发时,将其视为预期失败而跳过。

我怎样才能做到这一点?我还需要try: ... except: ...在测试主体中放入 a 吗?我需要在 except 块中做什么才能将其标记为预期失败?

编辑:为了解决@hoefling的评论,分离出失败的案例将是理想的解决方案。但不幸的是,hypothesis没有给我足够的句柄来控制它。我最多可以控制生成数据的总数和限制(最小值,最大值)。然而,失败案例的范围非常窄。我没有办法控制这一点。我想这就是假设的要点,也许我根本不应该为此使用假设。

这是我生成数据的方式(稍微简化):

cities = [f"city{i}" for i in range(4)]
cats = [f"cat{i}" for i in range(4)]


@st.composite
def …
Run Code Online (Sandbox Code Playgroud)

python expected-exception pytest python-hypothesis

4
推荐指数
1
解决办法
1316
查看次数

如何将 kwargs 传递给 pydantic 验证器

我正在尝试编写pydanticvalidators,但我似乎无法理解如何使用kwargs文档中提到的参数。我想传递条件参数进行验证。这是一个玩具示例:

from pydantic import validator
import pydantic.dataclasses as pyd_dc


@pyd_dc.dataclass
class Point_t:
    x: int = 0
    y: int = 1

    @validator("y")
    def quadrant(cls, val, values, **kwargs):
        pt = x, y = values.get("x", None), val
        if x is None:
            raise ValueError(f"invalid point: {x}, {y}")

        signs = kwargs.get("signs", None)
        if signs is None:
            raise ValueError("'signs' parameter missing")

        if all(c * s >= 0 for c, s in zip(pt, signs) if s != 0):
            return val

        raise ValueError(f"{pt} …
Run Code Online (Sandbox Code Playgroud)

validation python-3.x python-dataclasses pydantic

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

Linux:在有限的空间上使用拆分

我在linux机器上有一个巨大的文件。该文件约为20GB,我的盒子上的空间约为25GB。我想将文件分割成〜100mb的部分。我知道这里有一个“ split”命令,但是保留了原始文件。我没有足够的空间来保存原件。关于如何完成这方面的任何想法?如果它们使任务比bash容易,我什至将使用任何节点模块。

linux bash file-io

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

numpy 数组的属性

假设我们有一个 numpy 数组。

a = np.array([[1,2,3],[4,5,6], [7,8,9]])
Run Code Online (Sandbox Code Playgroud)

现在,如果我想提取第 0 列和第 2 列,则需要执行类似的操作

b = a[:, [0, 2]]
Run Code Online (Sandbox Code Playgroud)

然而,如果我们尝试通过执行来查找 b 的属性b.flags,我们会得到

C_CONTIGUOUS : False
F_CONTIGUOUS : True
Run Code Online (Sandbox Code Playgroud)

可以看到,原本是C_contigious的数组a自动转换为F_contigulous。如果我在单核上运行代码,这通常不会造成任何问题。但是,如果我使用 mpi4py 将数据分散到多个核心,则它必须仅是 C_contigious,否则分散是不正确的。

我的问题是如何避免“b”自动转换为 F_contigious?

谢谢,

SLB

python numpy numpy-slicing

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