小编Bur*_*000的帖子

使用yield或__next __()进行迭代

我正在研究制作可迭代的对象,并且我想知道这两个选项中哪一个更加pythonic /更好的方式,没有区别或者我对使用yield有错误的想法?对我来说使用yield似乎更清晰,显然它比使用__next __()更快,但我不确定.

class iterable_class():

    def __init__(self, n):
        self.i = 0
        self.n = n

    def __iter__(self):
        return self

    def __next__(self):
        if self.i < self.n:
            i = self.i
            self.i += 1
            return i
        else:
            raise StopIteration()
Run Code Online (Sandbox Code Playgroud)

使用产量:

class iterable_class_with_generator():

    def __init__(self, n):
        self.i = 0
        self.n = n

    def __iter__(self):
        while self.i < self.n:
            yield self.i
            self.i += 1
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

带边界检查的 Numpy 切片

numpy 是否提供了一种在对数组进行切片时进行边界检查的方法?例如,如果我这样做:

arr = np.ones([2,2])
sliced_arr = arr[0:5,:]
Run Code Online (Sandbox Code Playgroud)

这个切片没问题,即使我要求不存在的索引,它也会返回整个 arr 。如果我尝试切出数组的边界,是否有另一种切入 numpy 的方法会引发错误?

python numpy

7
推荐指数
2
解决办法
1689
查看次数

在Tensorflow 2中导出冻结的图.pb文件

我一直在尝试Tensorflow 2 Alpha,并且一直在尝试冻结模型并将其导出到.pb graphdef文件。

在Tensorflow 1中,我可以做这样的事情:

# Freeze the graph.
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
    sess,
    sess.graph_def,
    output_node_names)

# Save the frozen graph to .pb file.
with open('model.pb', 'wb') as f:
    f.write(frozen_graph_def.SerializeToString())
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不再可行,因为convert_variables_to_constants被删除并且不鼓励使用会话。

我看了看,发现有一个冻结图 实用程序https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py与SavedModel导出一起使用。

是否仍可以在Python中执行某些操作,或者我现在打算切换并使用此工具?

tensorflow tensorflow2.0

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

如何修复 Android 项目构建因 .so 不是 ABI 而失败的问题

我有一个使用 Android Gradle Plugin 7.4.2 的项目,我使用升级助手更新到 8.0.2,但现在我的项目无法构建,并出现以下错误:

原因:从路径 /Users/user01/.gradle/caches/transforms-3/4445827a66e5ef9b85054fadb96c8209/transformed/jetified-armnn.delegate-23.05/jni/arm64-v8.2-a/libarmnn_delegate_jni.so 提取的 jni 不是 ABI

有谁知道是否有某种方法可以在 Gradle 中指定不使用该库的 arm64-v8.2-a ABI 版本?我尝试添加以下内容:

    ndk {
        // Specifies the ABI configurations of your native
        // libraries Gradle should build and package with your app.
        abiFilters 'arm64-v8a'
    }
Run Code Online (Sandbox Code Playgroud)

并且

splits {
        abi {
            enable true
            reset()
            include "arm64-v8a"
        }
    }
Run Code Online (Sandbox Code Playgroud)

但那些没有帮助。如果我恢复升级,项目构建正常,但我想使用最新版本的 Gradle 插件。

编辑:有关额外信息,此依赖项以 .AAR 文件的形式出现,其中包含已编译的本机 .so 文件的 arm64-v8a 和 arm64-v8.2-a 版本。看起来在较旧的 Android Gradle 插件版本中,v8.2 只是被忽略,但现在它被自动拾取并导致此问题?

android gradle android-gradle-plugin

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