AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-17729094

DJDuque's questions

Martin Hope
DJDuque
Asked: 2025-04-20 15:44:45 +0800 CST

在 PyTorch 中广播 [B, 1] 张量以将移位应用于特定通道

  • 8

我在 PyTorch 中有一个p形状的张量(B, 3, N):

# 2 batches, 3 channels (x, y, z), 5 points
p = torch.rand(2, 3, 5, requires_grad=True)
"""
p: tensor([[[0.8365, 0.0505, 0.4208, 0.7465, 0.6843],
         [0.9922, 0.2684, 0.6898, 0.3983, 0.4227],
         [0.3188, 0.2471, 0.9552, 0.5181, 0.6877]],

        [[0.1079, 0.7694, 0.2194, 0.7801, 0.8043],
         [0.8554, 0.3505, 0.4622, 0.0339, 0.7909],
         [0.5806, 0.7593, 0.0193, 0.5191, 0.1589]]], requires_grad=True)
"""

然后是另一个z_shift形状[B, 1]:

z_shift = torch.tensor([[1.0], [10.0]], requires_grad=True)
"""
z_shift: tensor([[1.],
        [10.]], requires_grad=True)
"""

我想对每个批次中的所有点应用适当的 z 移位,保持 x 和 y 不变:

"""
p: tensor([[[0.8365, 0.0505, 0.4208, 0.7465, 0.6843],
         [0.9922, 0.2684, 0.6898, 0.3983, 0.4227],
         [1.3188, 1.2471, 1.9552, 1.5181, 1.6877]],

        [[0.1079, 0.7694, 0.2194, 0.7801, 0.8043],
         [0.8554, 0.3505, 0.4622, 0.0339, 0.7909],
         [10.5806, 10.7593, 10.0193, 10.5191, 10.1589]]])
"""

我设法这样做:

p[:, 2, :] += z_shift

对于的情况requires_grad=False,但这在forward我的nn.Module(我认为相当于requires_grad=True)内部失败了:

RuntimeError: a view of a leaf Variable that requires grad is being used in an in-place operation.
python
  • 1 个回答
  • 38 Views
Martin Hope
DJDuque
Asked: 2025-04-05 13:34:27 +0800 CST

如何重复和截断列表元素到固定长度

  • 7

我有如下数据:

lf = pl.LazyFrame(
    {
        "points": [
            [
                [1.0, 2.0],
            ],
            [
                [3.0, 4.0],
                [5.0, 6.0],
            ],
            [
                [7.0, 8.0],
                [9.0, 10.0],
                [11.0, 12.0],
            ],
        ],
        "other": ["foo", "bar", "baz"],
    },
    schema={
        "points": pl.List(pl.Array(pl.Float32, 2)),
        "other": pl.String,
    },
)

我想让所有列表都具有相同数量的元素。如果当前列表包含的元素多于我需要的元素,则应将其截断。如果列表包含的元素少于我需要的元素,则应按顺序重复执行,直到包含足够的元素。

我设法让它工作了,但我觉得我有点太过繁琐了。有没有更简洁的方法来实现这一点?也许可以用gather?

target_length = 3

result = (
    lf.with_columns(
        needed=pl.lit(target_length).truediv(pl.col("points").list.len()).ceil()
    )
    .with_columns(
        pl.col("points")
        .repeat_by("needed")
        .list.eval(pl.element().explode())
        .list.head(target_length)
    )
    .drop("needed")
)

编辑

上述方法适用于玩具示例,但当我尝试在真实数据集中使用它时,它会失败:

pyo3_runtime.PanicException: Polars' maximum length reached. Consider installing 'polars-u64-idx'.

我还没能为此制作一个 MRE,但我的数据有 400 万行,每行的“点”列表有 1 到 8000 个元素(我试图填充/截断到 800 个元素)。这些元素看起来都很小,我不明白如何u32达到最大长度。

我很感激我可以尝试的任何替代方法。

我最接近的(不惊慌)是:

但这不会按顺序填充重复列表。它只会填充重复的最后一个元素。

target_length = 3

result = (
    lf.with_columns(
        pl.col("points")
        .list.gather(
            pl.int_range(target_length),
            null_on_oob=True,
        )
        .list.eval(pl.element().forward_fill())
    )
    .drop("needed")
)
python
  • 1 个回答
  • 97 Views
Martin Hope
DJDuque
Asked: 2025-04-02 14:46:59 +0800 CST

如何对数据集进行重新采样以实现均匀分布

  • 7

我有一个具有如下模式的数据集:

df = pl.DataFrame(
    {
        "target": [
            [1.0, 1.0, 0.0],
            [1.0, 1.0, 0.1],
            [1.0, 1.0, 0.2],
            [1.0, 1.0, 0.8],
            [1.0, 1.0, 0.9],
            [1.0, 1.0, 1.0],
        ],
        "feature": ["a", "b", "c", "d", "e", "f"],
    },
    schema={
        "target": pl.Array(pl.Float32, 3),
        "feature": pl.String,
    },
)

如果我制作目标 z 值的直方图,它看起来像: 原来的

我想重新采样数据以使其沿 z 方向平坦。

我设法用一种多步骤的黑客方法完成了这件事(而且速度很慢)。我想知道是否有人可以建议一种更干净(和更高效)的方法?

我正在做的是:

  1. 找到所述直方图的箱边界:
bins = 2 # Use e.g. 100 or larger in reality
z = df.select(z=pl.col("target").arr.get(2))
z_min = z.min()
z_max = z.max()
breaks = np.linspace(z_min, z_max, num=bins+1)
  1. 找出计数最少的箱子中有多少个计数:
counts = (
    df.with_columns(bin=pl.col("target").arr.get(2).cut(breaks))
    .with_columns(counter=pl.int_range(pl.len()).over("bin"))
    .group_by("bin")
    .agg(pl.col("counter").max())
    .filter(pl.col("counter") > 0)  # <- Nasty way of filtering the (-inf, min] bin
    .select(pl.col("counter").min())
).item()
  1. 在每个箱子上仅选择“计数”元素:
df = (
    df.with_columns(bin=pl.col("target").arr.get(2).cut(breaks))
    .with_columns(counter=pl.int_range(pl.len()).over("bin"))
    .filter(pl.col("counter") <= counts)
    .select("target", "feature")
)

这给了我: 平坦的

大家有什么建议吗?

python
  • 1 个回答
  • 62 Views
Martin Hope
DJDuque
Asked: 2024-09-16 01:45:39 +0800 CST

分解不同长度的多个列

  • 10

我有一个像这样的数据框:

data = {
    "a": [[1], [2], [3, 4], [5, 6, 7]],
    "b": [[], [8], [9, 10], [11, 12]],
}
df = pl.DataFrame(data)
"""
┌───────────┬───────────┐
│ a         ┆ b         │
│ ---       ┆ ---       │
│ list[i64] ┆ list[i64] │
╞═══════════╪═══════════╡
│ [1]       ┆ []        │
│ [2]       ┆ [8]       │
│ [3, 4]    ┆ [9, 10]   │
│ [5, 6, 7] ┆ [11, 12]  │
└───────────┴───────────┘
"""

每对列表的长度可能不一样,我想将爆炸“截断”为两个列表中最短的一个:

"""
┌─────┬─────┐
│ a   ┆ b   │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 2   ┆ 8   │
│ 3   ┆ 9   │
│ 4   ┆ 10  │
│ 5   ┆ 11  │
│ 6   ┆ 12  │
└─────┴─────┘
"""

我在想,也许我必须用 填充两个列表中最短的列表以None匹配两个长度,然后drop_nulls。但我想知道是否有更直接的方法可以解决这个问题?

python
  • 2 个回答
  • 51 Views
Martin Hope
DJDuque
Asked: 2024-09-14 06:07:20 +0800 CST

仅保留至少有一个空值的行

  • 7

我试图做的基本上是相反的drop_nulls()。我想保留至少有一个的所有行null。

我想做类似的事情(但我不想列出所有其他列):

for (name,) in (
    df.filter(
        pl.col("a").is_null()
        | pl.col("b").is_null()
        | pl.col("c").is_null()
    )
    .select("name")
    .unique()
    .rows()
):
    print(
        f"Ignoring `{name}` because it has at least one null",
        file=sys.stderr,
    )
df = df.drop_nulls()
python
  • 1 个回答
  • 34 Views
Martin Hope
DJDuque
Asked: 2024-09-13 21:50:20 +0800 CST

如何在第一次出现后在列中传播“null”?

  • 9

我有两组数据集:

第一个描述了我的期望:

expected = {
    "name": ["start", "stop", "start", "stop", "start", "stop", "start", "stop"],
    "description": ["a", "b", "c", "d", "e", "f", "g", "h"],
}

第二段描述了我的观察:

observed = {
    "name": ["start", "stop", "start", "stop", "stop", "stop", "start"],
    "time": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7],
}

我想根据我期望的顺序将我的所有观察结果与描述进行匹配。但是一旦发现不一致,就什么都不能匹配了。

我设法找到了第一个不一致之处,例如:

observed_df = pl.DataFrame(observed).with_row_index()
expected_df = pl.DataFrame(expected).with_row_index()

result = observed_df.join(expected_df, on=["index", "name"], how="left").select(
    "description", "time"
)
"""
┌─────────────┬──────┐
│ description ┆ time │
│ ---         ┆ ---  │
│ str         ┆ f64  │
╞═════════════╪══════╡
│ a           ┆ 0.1  │
│ b           ┆ 0.2  │
│ c           ┆ 0.3  │
│ d           ┆ 0.4  │
│ null        ┆ 0.5  │   -> First inconsistency gets a "null" description
│ f           ┆ 0.6  │
│ g           ┆ 0.7  │
└─────────────┴──────┘
"""

我怎样才能传播这个null通过第一个不一致的情况?

此外,我的真实数据还有一个附加id列,其中每个列id都是如上所述的情况,并且独立于其他id列。是否可以以某种方式“按 ID 分组”并一次性应用此逻辑,而不是id分别处理每个逻辑:

observed = {
    "id": [1, 2, 1, 2, 2],
    "name": ["start", "start", "stop", "stop", "stop"],
    "time": [0.1, 0.2, 0.3, 0.4, 0.5],
}

expected = {
    "id": [1, 1, 2, 2],
    "name": ["start", "stop", "start", "stop"],
    "description": ["a", "b", "c", "d"],
}

result = {
    "id": [1, 2, 1, 2, 2],
    "description": ["a", "c", "b", "d", None],
    "time": [0.1, 0.2, 0.3, 0.4, 0.5],
}
python
  • 1 个回答
  • 51 Views
Martin Hope
DJDuque
Asked: 2024-09-12 12:09:59 +0800 CST

在保持时间差的同时连接两个数据集之间的时间戳

  • 6

我有以下两个数据集:

  1. 这个可以非常可靠地告诉我某个事件是否发生,但它的时间戳仅在几秒钟内有效(假设是 2 秒):
    coarse = {
        "name": ["a", "a", "b", "c", "a"],
        "timestamp": [100, 103, 195, 220, 221],
    }
    coarse_df = pl.DataFrame(coarse)
    """
    ┌──────┬───────────┐
    │ name ┆ timestamp │
    │ ---  ┆ ---       │
    │ str  ┆ i64       │
    ╞══════╪═══════════╡
    │ a    ┆ 100       │
    │ a    ┆ 103       │
    │ b    ┆ 195       │
    │ c    ┆ 220       │
    │ a    ┆ 221       │
    └──────┴───────────┘
    """
    
  1. 这个具有非常准确的时间,但它有一些噪音/误报(请注意,t=0两个数据集是不同的,有一个任意偏移):
    fine = {
        "name": ["a", "a", "a", "a", "b", "c", "b", "a"],
        "time": [0.05, 10.05, 12.51, 51.12, 106.0, 128.01, 130.0, 132.9],
    }
    fine_df = pl.DataFrame(fine)
    """
    ┌──────┬────────┐
    │ name ┆ time   │
    │ ---  ┆ ---    │
    │ str  ┆ f64    │
    ╞══════╪════════╡
    │ a    ┆ 0.05   │
    │ a    ┆ 10.05  │
    │ a    ┆ 12.51  │
    │ a    ┆ 51.12  │
    │ b    ┆ 106.0  │
    │ c    ┆ 128.01 │
    │ b    ┆ 130.0  │
    │ a    ┆ 132.9  │
    └──────┴────────┘
    """
    
    

我正在尝试以某种方式合并这些数据集以获得类似以下内容。本质上是从第二个数据集获取时间戳,并使用第一个数据集中的时间差来过滤掉误报。

"""
┌──────┬────────┐
│ name ┆ time   │
│ ---  ┆ ---    │
│ str  ┆ f64    │
╞══════╪════════╡
│ a    ┆ 10.05  │
│ a    ┆ 12.51  │
│ b    ┆ 106.0  │
│ c    ┆ 128.01 │
│ a    ┆ 132.9  │
└──────┴────────┘
"""

编辑

我目前正在做什么来识别假阳性(用文字表示,因为这是一个丑陋的嵌套 for 循环):

鉴于两个数据集之间的偏移是任意的,假设第一个“a”事件是真实的:

现在coarse看起来像是将时间转移了 100:

┌──────┬───────────┐
│ name ┆ timestamp │
│ ---  ┆ ---       │
│ str  ┆ i64       │
╞══════╪═══════════╡
│ a    ┆ 0         │  -> Good, there is a timestamp in `fine` within 2s
│ a    ┆ 3         │  -> Bad, no timestamp in `fine` matches
│ b    ┆ 95        │  -> Bad, ditto
│ c    ┆ 120       │  -> Bad, ditto
│ a    ┆ 121       │  -> Bad, ditto
└──────┴───────────┘

好的,我没有找到所有匹配项,那么第二个“a”一定是真正的“a”(而是偏移了 90 秒):

┌──────┬───────────┐
│ name ┆ timestamp │
│ ---  ┆ ---       │
│ str  ┆ i64       │
╞══════╪═══════════╡
│ a    ┆ 10        │  -> Good, it matches 10.05
│ a    ┆ 13        │  -> Good, it matches 12.51
│ b    ┆ 105       │  -> Good, it matches 106.0
│ c    ┆ 130       │  -> Good, it matches 128.01
│ a    ┆ 131       │  -> Good it matches 132.9
└──────┴───────────┘

基本上,我会随着时间滑动第二个数据集,直到找到一个“时间模式”,将第一个数据框中的所有事件匹配到第二个数据框的子集中。

dataframe
  • 1 个回答
  • 57 Views
Martin Hope
DJDuque
Asked: 2024-08-26 16:27:52 +0800 CST

如何按条件过滤唯一性

  • 9

假设我有一个如下数据集:

data = {
    "a": [1, 4, 2, 4, 7, 4],
    "b": [4, 2, 3, 3, 0, 2],
    "c": ["a", "b", "c", "d", "e", "f"],
}

并且我只想保留由和a + b的单个组合唯一描述的行。我设法破解了这一点:ab

df = (
    pl.DataFrame(data)
    .with_columns(sum_ab=pl.col("a") + pl.col("b"))
    .group_by("sum_ab")
    .agg(pl.col("a"), pl.col("b"), pl.col("c"))
    .filter(
        (pl.col("a").list.unique().list.len() == 1)
        & (pl.col("b").list.unique().list.len() == 1)
    )
    .explode(["a", "b", "c"])
    .select("a", "b", "c")
)

"""
shape: (2, 3)
┌─────┬─────┬─────┐
│ a   ┆ b   ┆ c   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ str │
╞═════╪═════╪═════╡
│ 4   ┆ 2   ┆ b   │
│ 4   ┆ 2   ┆ f   │
└─────┴─────┴─────┘
"""

有人能建议一种更好的方法来实现同样的效果吗?我花了一些功夫才弄清楚这个逻辑,所以我想有一种更直接/更优雅的方法可以获得相同的结果。

python
  • 2 个回答
  • 73 Views
Martin Hope
DJDuque
Asked: 2024-07-24 14:03:36 +0800 CST

向标签页添加关闭按钮

  • 5

我正在学习引导程序,我想x在每个选项卡名称旁边有一个按钮来关闭它:

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">

<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item" id="tab-li-1">
    <button
      class="nav-link active"
      data-bs-toggle="tab"
      data-bs-target="#tab-1"
      type="button"
    >
      First
      <button
        class="btn-close"
        onclick="
          document.getElementById(`tab-li-1`).remove();
          document.getElementById(`tab-1`).remove();
        "
       ></button>
    </button>
  </li>
  <li class="nav-item" id="tab-li-2">
    <button
      class="nav-link"
      data-bs-toggle="tab"
      data-bs-target="#tab-2"
      type="button"
     >
     Second
       <button
        class="btn-close"
        onclick="
          document.getElementById(`tab-li-2`).remove();
          document.getElementById(`tab-2`).remove();
        "
       ></button>
     </button>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="tab-1" tabindex="0">Some text here for `First`</div>
  <div class="tab-pane fade" id="tab-2" tabindex="0">More text here for `Second`</div>
</div>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" crossorigin="anonymous"></script>

我可以对在第一个按钮内嵌套另一个按钮进行一些修改,然后:

document.getElementById(tabId).remove();
document.getElementById(tabContentId).remove();

但是我在网上发现将一个按钮嵌套在另一个按钮中是无效的

大家能建议一下有没有更好的替代方案吗?

html
  • 1 个回答
  • 34 Views
Martin Hope
DJDuque
Asked: 2024-03-15 03:05:01 +0800 CST

丢失极坐标数据框中的“类型”信息

  • 7

抱歉,如果我的问题没有多大意义。我在 python 方面没有太多经验。

我有一些代码看起来像:

import polars as pl
from typing import NamedTuple


class Event(NamedTuple):
    name: str
    description: str


def event_table(num) -> list[Event]:
    events = []
    for i in range(5):
        events.append(Event("name", "description"))
    return events


def pretty_string(events: list[Event]) -> str:
    pretty = ""
    for event in events:
        pretty += f"{event.name}: {event.description}\n"
    return pretty

# This does work
print(pretty_string(event_table(5)))

# But then it doesn't work if I have my `list[Event]` in a dataframe
data = {"events": [0, 1, 2, 3, 4]}
df = pl.DataFrame(data).select(events=pl.col("events").map_elements(event_table))

# This doesn't work
pretty_df = df.select(events=pl.col("events").map_elements(pretty_string))
print(pretty_df)

# Neither does this
print(pretty_string(df["events"][0]))

它失败并出现错误:

Traceback (most recent call last):
  File "path/to/script.py", line 32, in <module>
    pretty_df = df.select(events=pl.col("events").map_elements(pretty_string))
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "path/to/.venv/lib/python3.11/site-packages/polars/dataframe/frame.py", line 8116, in select
    return self.lazy().select(*exprs, **named_exprs).collect(_eager=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "path/to/.venv/lib/python3.11/site-packages/polars/lazyframe/frame.py", line 1934, in collect
    return wrap_df(ldf.collect())
                   ^^^^^^^^^^^^^
polars.exceptions.ComputeError: AttributeError: 'dict' object has no attribute 'name'

看来我的list[Event]已经不再是里面的了df。我不知道如何让它发挥作用。

python
  • 1 个回答
  • 32 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve