小编dai*_*ign的帖子

在MATLAB中从4个点计算二维均匀透视变换矩阵

我在 2D 中有 4 个点的坐标,它们在应用透视变换后形成一个矩形和它们的坐标。

在此处输入图片说明

透视变换在齐次坐标中计算并由 3x3 矩阵定义M。如果矩阵未知,我如何从给定的点计算它?

一分的计算将是:

| M11 M12 M13 |   | P1.x |   | w*P1'.x |
| M21 M22 M23 | * | P1.y | = | w*P1'.y |
| M31 M32 M33 |   | 1    |   | w*1     |
Run Code Online (Sandbox Code Playgroud)

为了同时计算所有点,我将它们一起写在一个矩阵中A,类似于矩阵中的转换点B

    | P1.x P2.x P3.x P4.x |
A = | P1.y P2.y P3.y P4.y |
    | 1    1    1    1    |
Run Code Online (Sandbox Code Playgroud)

所以方程是M*A=B,这可以M在 MATLAB 中通过M = …

matlab transform matrix linear-algebra

8
推荐指数
2
解决办法
6089
查看次数

用python的分位数索引替换numpy数组中的条目

我有一个带有数字的一维 numpy 数组,我希望每个数字都替换为它所属的分位数的索引。

这是我的五分位指数代码:

import numpy as np

def get_quintile_indices( a ):

    result = np.ones( a.shape[ 0 ] ) * 4

    quintiles = [
        np.percentile( a, 20 ),
        np.percentile( a, 40 ),
        np.percentile( a, 60 ),
        np.percentile( a, 80 )
    ]

    for q in quintiles:
        result -= np.less_equal( a, q ) * 1

    return result

a = np.array( [ 58, 54, 98, 76, 35, 13, 62, 18, 62, 97, 44, 43 ] )
print get_quintile_indices( a )
Run Code Online (Sandbox Code Playgroud)

输出:

[ 2. …
Run Code Online (Sandbox Code Playgroud)

python performance numpy vectorization quantile

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

rxjs 根据第一次的答案返回不同的 Observable

我有一个访问两个 Observable 并返回一个 Observable 的函数。

首先订阅第一个 Observable。根据它的答案,是否必须订阅第二个 Observable(也将第一个 Observable 的值传递给它)。但在任何情况下,都应该从函数返回一个 Observable。如果条件确定必须查询第二个 Observable,那么返回的 Observable 应该只在第二个 Observable 完成后才完成。在另一种情况下,返回的 Observable 在第一个 Observable 完成时完成。

到目前为止,我有这个:

private load(): Observable<boolean> {
    return this.accessControl.map((res: any) => {
        if (res.accessGranted) {
            this.dataService.getData(res.id).subscribe((v: number) => {
                this.value = v;
            }, () => {
                this.value = null;
                this.showErrorMessage();
            });
        } else {
            this.value = null;
        }
        return true;
    })
    .first();
}
Run Code Online (Sandbox Code Playgroud)

返回的 Observable 是第一个的映射版本。但是,到目前为止,我未能等待第二个 Observable 并在 if 子句评估为 true 时返回它的映射版本。

更新

根据 Llai 的回答,我现在想出了这个:

private load(): Observable<boolean> {
    return this.accessControl.flatMap((res: …
Run Code Online (Sandbox Code Playgroud)

reactive-programming observable rxjs angular

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

旧版Visual Basic代码中的隐式ByRef

我必须从旧版的Visual Basic软件中复制算法,而关于代码的一件事我不理解。

看来作者已经使用某种方式隐式地通过引用传递简单的数据类型,例如整数。我第一次认为这可能是原始软件中的错误,但第三次出现后,它似乎是故意的。

我无法运行和调试原始(VB6或更低版本)代码。并且在我尝试重现该行为(使用VB.NET)的每个简单代码示例中,除非明确使用ByRef,否则它始终按值传递。

我举了一个例子:

Option Explicit

Module VBModule
    Public Sub Calculate(value)
        value = value + 1
    End Sub

    Function Starter()
        Dim value%
        Call Calculate(value)
        If value > 0 Then
            Console.WriteLine("Success")
        End If
        Console.WriteLine(value)
    End Function

    Sub Main()
        Call Starter()
    End Sub
End Module
Run Code Online (Sandbox Code Playgroud)

该代码取决于Sub value更改Calculate以达到“成功”。在原始项目中,如果不起作用,则有数百行代码将无法访问。

所以问题是,有没有办法value在仍然使用整数类型的情况下通过引用传递而不使用ByRef?还是我要完全理解的错误代码?

作者在代码库中的任何地方都没有使用显式的ByRef或ByVal语句。变量使用类型字符声明,但是子例程参数缺少类型声明。我不确定所使用的Visual Basic版本。在主文件中,第一个语句为VERSION 5.00

当我在Visual Studio中打开代码时,参数的类型显示为Object。因此,Visual Studio知道我不知道的东西,或者仅仅是因为参数缺少类型声明。

我还拥有该软件的编译版本,其产生的结果看起来不错。因此,当我完成代码转录后,我至少可以对照原始结果进行检查。

vb6 basic reverse-engineering pass-by-reference byref

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