我在 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 = …
我有一个带有数字的一维 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) 我有一个访问两个 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) 我必须从旧版的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知道我不知道的东西,或者仅仅是因为参数缺少类型声明。
我还拥有该软件的编译版本,其产生的结果看起来不错。因此,当我完成代码转录后,我至少可以对照原始结果进行检查。