我在目前正在进行的项目中遇到了一个小问题.
直截了当,让我们假设我有一个二维numpy.array- 我会称之为arr.
我需要切片arr,但这个切片必须包含一些填充,具体取决于所选的间隔.
例:
arr = numpy.array([
[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[ 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25]
])
Run Code Online (Sandbox Code Playgroud)
实际上,numpy的回应arr[3:7, 3:7]是:
array([[19, 20],
[24, 25]])
Run Code Online (Sandbox Code Playgroud)
但是我需要它填充,好像arr比实际更大.
以下是我需要的回复arr[3:7, 3:7]:
array([[19, 20, 0, 0],
[24, 25, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0]]) …Run Code Online (Sandbox Code Playgroud) 我告诉我的一个朋友(正在学习C),他不能同时做多个变量比较:
int main(){
int a[4];
scanf("%d %d %d %d", &a[0], &a[1], &a[2], &a[3]);
if(a[0] < a[1] < a[2] < a[3]){
printf("OK!\n");
}
else{
printf("I've told ya\n");
}
}
Run Code Online (Sandbox Code Playgroud)
所以,为了证明我是对的,我已经编写了上面的程序,然后我用它执行了它1 2 3 4.令人惊讶的是印刷的OK!.所以我不知道该告诉他什么,因为我确信这不对.
最后,它是否是未定义的行为?
我需要一个使用两个 32 位整数作为参数的算法,并返回这些参数的乘法,并将其拆分为另外两个 32 位整数:32 最高位部分和 32 最低位部分。
我会尝试:
uint32_t p1, p2; // globals to hold the result
void mult(uint32_t x, uint32_t y){
uint64_t r = (x * y);
p1 = r >> 32;
p2 = r & 0xFFFFFFFF;
}
Run Code Online (Sandbox Code Playgroud)
虽然它可以工作1,但不能保证机器中存在 64 位整数,也不能保证编译器使用它们。
那么,怎样才是最好的解决方法呢?
注1:实际上,它不起作用,因为我的编译器不支持64位整数。
Obs:请避免使用boost。