python - 将 numpy 标量转换为 python 简单 native (稍作改动)

标签 python numpy protocol-buffers

我有一个函数可以执行一些操作并设置一些 protobuf 值。

现在 protobuf 要求设置的值是 python native 值,而不是 numpy 值。

现在,一半的时间使用 native 值调用此函数,一半的时间使用 numpy 值。

我需要一种完全可靠的方法来将 numpy 值转换为 native 值,同时在类型已经是 python native 值的情况下不会导致问题。

我尝试过的:

使用 numpy.asscalar 获取 native 值时会失败 我尝试过将其转换为字符串,然后再转换回来,但这感觉非常慢,而且执行此操作的方式很糟糕。

最佳答案

您可以编写自己的 asscalar(),它尝试使用 np.asscalar()如果失败,则恢复为仅按原样返回值:

import numpy as np

def asscalar(v):
    """
    Try converting a numpy array of size 1 to a scalar equivalent, or return
    the value as is.

    Returns:
        A scalar value, if a numpy array of size 1 was given, the value itself
        otherwise. Note that a python list of size 1 will be returned as is.

    Raises:
        A ValueError, if v is a numpy array of size larger than 1.
    """
    try:
        return np.asscalar(v)

    except AttributeError:
        # Not something numpy understands
        return v

关于python - 将 numpy 标量转换为 python 简单 native (稍作改动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37178905/

相关文章:

python - 为什么我不应该在 Python 程序中使用 exit()?

python - 如何更改实例化Python类的默认参数?

java - 为什么com.google.protobuf.CodedOutputStream的flush方法内部没有调用output.flush()?

java - 如何为 Wildfly Infinispan 子系统配置自定义 Protostream 序列化上下文初始值设定项?

python - 不使用字典从字符串形成变量

python - 从现有数据帧的行子集创建新的 pandas 数据帧

python - 基于图形边缘的相应分数

python - 高效 append 到 Pandas 数据帧

python - 从 python 嵌套列表在 pandas 中创建新列

java - 使用 JNI 将 GPB 序列化数据从 Java 高效传递到 C++