小编pac*_*man的帖子

使用其他Cython代码中的自定义Cython代码

我目前正在尝试优化我的Python程序并开始使用Cython以减少函数调用开销,并且可能稍后包括优化的C库函数.

所以我遇到了第一个问题:

我在我的代码中使用组合来创建一个更大的类.到目前为止,我已经将我的一个Python类转换为Cython(这很难).这是代码:

import numpy as np
cimport numpy as np
ctypedef np.float64_t dtype_t
ctypedef np.complex128_t cplxtype_t
ctypedef Py_ssize_t index_t

cdef class bendingForcesClass(object):
    cdef dtype_t bendingRigidity
    cdef np.ndarray matrixPrefactor
    cdef np.ndarray bendingForces

    def __init__(self, dtype_t bendingRigidity, np.ndarray[dtype_t, ndim=2] waveNumbersNorm):
        self.bendingRigidity = bendingRigidity
        self.matrixPrefactor = -self.bendingRigidity * waveNumbersNorm ** 2

    cpdef np.ndarray calculate(self, np.ndarray membraneHeight):
        cdef np.ndarray bendingForces
        bendingForces = self.matrixPrefactor * membraneHeight
        return bendingForces
Run Code Online (Sandbox Code Playgroud)

从我编写的Python/Cython类中,我调用了类方法calculate,因此在我的编写类中,我有以下(简化)代码:

from bendingForcesClass import bendingForcesClass

cdef class membraneClass(object):
    def  __init__(self, systemSideLength, lowerCutoffLength, bendingRigidity):
        self.bendingForces …
Run Code Online (Sandbox Code Playgroud)

python methods class composition cython

11
推荐指数
2
解决办法
1574
查看次数

如何将空格参数转义到在 VS 构建后事件中运行的 PS 脚本

更新1:

再次仔细查看输出后,我有点明白了。通过在右括号和引号之间添加尾随空格,它可以工作:

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" "$(ProjectDir) " "$(TargetDir) "
Run Code Online (Sandbox Code Playgroud)

我怀疑 PowerShell 以某种方式解释了)".

有没有更优雅的方法来解决这个问题?

更新2

这很奇怪。我有另一个脚本可以进行清理并在)和之间没有空格的情况下工作",如下所示:

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersionCleanup.ps1" "$(ProjectDir)"
Run Code Online (Sandbox Code Playgroud)

但是添加尾随空格将导致它失败,因为它在内部将文件名附加到路径,因此路径将不正确。

如果有人理解这一点,我很乐意接受该解释作为正确答案!


原来的:

我在 VisualStudio 中有以下预构建命令,我想用它从 Git 标签注入版本:

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

如果路径 $(SolutionDir) 不包含空格(该路径也将出现在 $(ProjectDir) 或 $(TargetDir) 中),则此方法可以正常工作。

当路径 $(SolutionDir) 确实包含空格时,脚本似乎按预期启动,但参数未正确传递,我无法弄清楚如何在 PS 脚本的参数中转义它们。

我尝试添加 sing "、三重 """ 以及 ',这给出了以下内容(每个 PS 命令尝试不同的方法来转义空格):

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

参数[0]:

D:\VisualStudio

参数[1]:

项目\software_git_repo\ProgramEditor\

powershell -ExecutionPolicy ByPass -File …
Run Code Online (Sandbox Code Playgroud)

powershell parameter-passing visual-studio

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

如何避免或UnitTest意外使用具体的单例类型而不是使用StructureMap进行抽象

我最近在我的代码中遇到了以下错误,这使我无法进行调试.我想基于它的接口注入一个实例,如下所示:

MovementController(IMotorController motorController)
Run Code Online (Sandbox Code Playgroud)

但是我不小心使用了这样的具体类型:

MovementController(MotorController motorController)
Run Code Online (Sandbox Code Playgroud)

该项目仍然构建并运行良好,直到我尝试motorControllerMovementController实例访问.由于IMotorController访问硬件的底层实现,它必须是单例或我的锁代码.但是,由于我有其他类注入IMotorController,我现在MotorController在对象图中有两个实例,它们都通过串行连接访问硬件.这导致错误,在运行时处于更低的水平,这让我永远调试并找到真正的原因.

如何避免这种类型的错误或为我的StructureMap注册表编写单元测试以捕获这个微妙的错误?

c# structuremap unit-testing

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

使用 Pyjnius 时如何修复 jnius.JavaException

我试图让这个示例在 Java 中导入 TensorFlow 来运行: https: //github.com/deeplearning4j/tf-import

经过一些修改后,我成功地使Mnist.java中的 Java 导入能够工作。但是,我无法让 mnist_jumpy.py工作,以便在 Python 的 DeepLearning4J 中使用该模型。我通过以下修改运行它,但在加载模型时出现此异常:

log4j:WARN No appenders could be found for logger (org.nd4j.linalg.factory.Nd4jBackend).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.rits.cloning.Cloner (file:/home/micha/.deeplearning4j/pydl4j/pydl4j-1.0.0-SNAPSHOT-cpu-core-datavec-spark2-2.11/pydl4j-1.0.0-SNAPSHOT-bin.jar) to field java.util.TreeSet.m
WARNING: Please consider reporting this to the maintainers of com.rits.cloning.Cloner
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: …
Run Code Online (Sandbox Code Playgroud)

python java pyjnius tensorflow

5
推荐指数
0
解决办法
1816
查看次数

使用Cython优化NumPy

我目前正在尝试优化我用纯Python编写的代码.此代码使用NumPy的很沉重,因为我与NumPy的阵列工作.下面你可以看到我转换为Cython的最简单的类.这只是两个Numpy数组的乘法.这里:

bendingForces = self.matrixPrefactor * membraneHeight
Run Code Online (Sandbox Code Playgroud)

我的问题是,我是否以及如何优化它,当我看到"cython -a"生成的C代码有很多NumPy调用时,这看起来效率不高.

import numpy as np
cimport numpy as np
ctypedef np.float64_t dtype_t
ctypedef np.complex128_t cplxtype_t
ctypedef Py_ssize_t index_t

    cdef class bendingForcesClass( object ):
        cdef dtype_t bendingRigidity
        cdef np.ndarray matrixPrefactor
        cdef np.ndarray bendingForces

        def __init__( self, dtype_t bendingRigidity, np.ndarray[dtype_t, ndim=2] waveNumbersNorm ):
            self.bendingRigidity = bendingRigidity
            self.matrixPrefactor = -self.bendingRigidity * waveNumbersNorm**2

        cpdef np.ndarray calculate( self, np.ndarray membraneHeight ) :
            cdef np.ndarray bendingForces
            bendingForces = self.matrixPrefactor * membraneHeight
            return bendingForces
Run Code Online (Sandbox Code Playgroud)

我的想法是使用两个for …

python optimization numpy cython matrix-multiplication

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

Git 合并提交未在 Git/SourceTree 中显示为合并

我昨天合并了两个分支。在合并期间,我不小心隐藏了一些更改,同时解决了合并冲突。

我刚刚意识到现在 Git/SourceTree 现在没有将合并提交显示为合并,因为它没有指向合并提交的图形链接/行。

我不确定这是怎么发生的,是否是由于上面提到的隐藏或代表我的一些其他错误。

由于合并,我已经付出了一些努力来修复构建错误等,所以我不想重新启动。

所以我的问题是:有没有办法解决这个问题?!

git merge

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

如何忽略/删除接触图像边界的轮廓

我有以下代码使用cvThreshold和检测图像中的轮廓cvFindContours

CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contours = 0;

cvThreshold( processedImage, processedImage, thresh1, 255, CV_THRESH_BINARY );
nContours = cvFindContours(processedImage, storage, &contours, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cvPoint(0,0) );
Run Code Online (Sandbox Code Playgroud)

我想以某种方式扩展此代码,以过滤/忽略/删除任何接触图像边界的轮廓。但是我不确定如何去做。我应该过滤阈值图像还是之后过滤轮廓?希望有人知道一个优雅的解决方案,因为令人惊讶的是我无法通过谷歌搜索提出一个解决方案。

c++ opencv

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

WPF:使画布背景透明

我正在构建一个用户控件,它在 2x2 网格中有 4 个 Canvas。当我将网格的背景设置为某种颜色时,画布周围的颜色会发生变化,但画布的背景保持白色。

如何才能使画布组的背景透明并且可以看到网格的背景?我在这里找到了一些解释,但没有代码,我不明白如何让它工作。

编辑:这是 XAML 代码。正如您所看到的,我尝试<Canvas IsItemsHost="True" Background="{x:Null}"/>在代码中设置最后一个列表框的画布,但这不起作用。设置Background="Transparent"也不起作用。

<UserControl x:Class="ProgramEditor.objectPresenter.objectPresenter"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:sys="clr-namespace:System;assembly=mscorlib"
         xmlns:objectPresenter="clr-namespace:ProgramEditor.objectPresenter"
         xmlns:behavior="clr-namespace:RubberBand;assembly=RubberBand"
         xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
         xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"
         d:DataContext="{d:DesignInstance objectPresenter:objectViewModel, IsDesignTimeCreatable=True}"
         mc:Ignorable="d"
         d:DesignHeight="450" d:DesignWidth="700">

<UserControl.Resources>
    <sys:Double x:Key="objectWidth">610</sys:Double>
    <sys:Double x:Key="objectHeight">365</sys:Double>

    <objectPresenter:HorizontalValueConverter x:Key="horizontalValueConverter" />
    <objectPresenter:VerticalValueConverter x:Key="verticalValueConverter" />

    <Style x:Key="RowColumnSelector" TargetType="TextBlock">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsSelected}" Value="True">
                <Setter Property="Foreground" Value="Black"/>
                <Setter Property="FontWeight" Value="Bold"/>
            </DataTrigger>
        </Style.Triggers>
        <Setter Property="Cursor" Value="Hand"/>
    </Style>
    <DataTemplate DataType="{x:Type objectPresenter:TargetSelector}">
        <TextBlock Width="{Binding HorizontalSize, Converter={StaticResource horizontalValueConverter}, ConverterParameter={StaticResource objectWidth}}"
               Height="{Binding VerticalSize, Converter={StaticResource …
Run Code Online (Sandbox Code Playgroud)

wpf xaml background canvas

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