小编use*_*999的帖子

如何正确显示一个图中的多个图像?

我试图在一个图上显示20个随机图像.确实显示了图像,但它们被覆盖.我在用:

import numpy as np
import matplotlib.pyplot as plt
w=10
h=10
fig=plt.figure()
for i in range(1,20):
    img = np.random.randint(10, size=(h,w))
    fig.add_subplot(i,2,1)
    plt.imshow(img)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我希望它们自然地出现在网格布局中(比如4x5),每个都有相同的大小.部分问题是我不知道add_subplot的参数是什么意思.文档声明参数是行数,列数和图号.没有定位论点.此外,图号只能是1或2.我怎样才能实现这一点?

matplotlib

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

std :: launder与reinterpret_cast一起使用

今天在回答" 基于堆的分配数组的循环范围 "的问题时,我偶然发现了使用reinterpret_cast从指针类型转换为数组类型的建议std::launder(经过一些讨论我们决定发布一个新问题,因为我们不能找到结论.)演员如下完成(例如,为了能够使用基于范围的循环迭代数组):

int* ptr = new int[3];
auto arr_ptr = std::launder(reinterpret_cast<int (*)[3]>(ptr));
Run Code Online (Sandbox Code Playgroud)

我几乎可以肯定这是UB,但我不太确定.有没有人在C++中足够坚定地回答这个问题?

我认为这可以解释为什么reinterpret_cast在从ptr-type转换为array-type(我认为是UB)时是否有效,并且无论我是否使用它都没有std::launder.

c++ language-lawyer reinterpret-cast

10
推荐指数
0
解决办法
113
查看次数

代码具有min()/ max()调用的奇怪C++错误

当我的C++代码有min()或max()调用时,我看到了奇怪的错误.我正在使用Visual C++编译器.

c c++

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

可以同时安装哪些版本的Visual Studio?

安装Visual Studio 2003,2005和/或2008的任何组合是否有任何冲突?我在这里注意到一个相关的问题但想要一个更一般的答案.

visual-studio

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

boost ::变量用法

我正在通过wxWidgets开发GUI应用程序.它有两部分:GUI部分和"逻辑"部分.我希望Logic部分完全独立于wxWidgets.但GUI中的一个组件返回wxVariant,我需要在逻辑部分使用它.

所以我正在寻找一种方法将wxVariant"转换"为boost :: variant

wxVariant的工作原理如下:

wxVariant v("37");
int i = v.GetInteger(); //i==37
Run Code Online (Sandbox Code Playgroud)

所以我在想类似的东西

string s = methodReturningWxVariant().GetString();
boost::variant bV(s);

//later in code e.g
bV.GetInt();
bV.GetBool();
Run Code Online (Sandbox Code Playgroud)

可以像这样使用boost :: Variant(或boost :: Any)吗?

c++ variant boost-variant

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

Numpy和Scipy矩阵求逆函数的差异

我的问题很简单:矩阵求反numpy.linalg.invscipy.linalg.inv函数的区别是什么

Scipy函数仅仅是Numpy的包装器吗?效率,数值稳定性,速度...我应该选择哪一个?

谢谢 !

numpy scipy

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

当索引不是整数常量表达式时,不要使用数组下标; 使用gsl :: at()代替

我试图在Microsoft Visual Studio中创建一些示例代码

int main()
{
    const size_t size = 10;
    int arr[size];

    for (size_t i = 0; i < size; ++i)
        arr[i] = i;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在JetBrains ResharperC++发出以下警告 arr[i] = i;

在此输入图像描述 当索引不是整数常量表达式时,不要使用数组下标; 使用gsl :: at()代替

我无法理解这意味着什么以及如何解决此警告.

由于这是我经常使用的方案,我有点担心警告.

任何人都可以建议或指出我正确的方向吗?

编辑:将循环更改为:

for (size_t i = 0; i < size; ++i)
    arr[i] = 0;
Run Code Online (Sandbox Code Playgroud)

仍然会发出警告.

c++ resharper-c++ cpp-core-guidelines

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

cam.release()后网络摄像头仍然亮着

我正在使用opencv和Python3来阅读网络摄像头.

即使我发布了网络摄像头,网络摄像头仍然亮着.

我在做:

webcam = cv2.VideoCapture(0)
webcam.release()
Run Code Online (Sandbox Code Playgroud)

在释放命令之后,如果我尝试读取我得到(False, None)的摄像头:但摄像头本身仍然是<VideoCapture 0EE62DC0>.我不知道这是不是问题,但是在我杀死所有python脚本或python终端之前一直持续亮起.

我在Windows 10,python 3.5,opencv 4.0.1上.难道我做错了什么?

python python-3.x opencv3.0

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

C++中的严格别名规则和类型别名

我试图在违反严格别名规则时掌握未定义的行为.我已经阅读了很多关于SO的文章以便理解它.但是,还有一个问题:我真的不明白两种类型的非法别名.cpp-reference状态:

键入别名

每当尝试通过类型为AliasedType的glvalue读取或修改DynamicType类型的对象的存储值时,除非满足下列条件之一,否则行为是未定义的:

  • AliasedType和DynamicType类似.
  • AliasedType是DynamicType的(可能是cv限定的)有符号或无符号变体.
  • AliasedType是std :: byte,(自C++ 17开始)char或unsigned char:这允许将任何对象的对象表示检查为字节数组.

我还在SO上找到了一个很好的例子,我清楚地看到了这个问题:

int foo( float *f, int *i ) { 
    *i = 1;               
    *f = 0.f;            

   return *i;
}

int main() {
    int x = 0;

    std::cout << x << "\n";   // Expect 0
    x = foo(reinterpret_cast<float*>(&x), &x);
    std::cout << x << "\n";   // Expect 0?
}
Run Code Online (Sandbox Code Playgroud)

int并且float是不相似的类型,这个程序可能会造成严重破坏.我未能看到和理解的是以下修改:

struct A
{
    int a;
};

struct B
{
    int b;
};

A foo( …
Run Code Online (Sandbox Code Playgroud)

c++ strict-aliasing language-lawyer type-punning

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

Google风格指南(转发部分)

前言

Google风格指南包含前瞻性声明的缺点列表

  1. 前向声明可以隐藏依赖项,允许用户代码在标题更改时跳过必要的重新编译.

  2. 随后对库的更改可能会破坏前向声明.函数和模板的前向声明可以防止标题所有者对其API进行其他兼容的更改,例如扩展参数类型,添加具有默认值的模板参数或迁移到新的命名空间.

  3. 从名称空间std ::转发声明符号会产生未定义的行为.

  4. 可能很难确定是否需要前向声明或完整#include.用前向声明替换#include可以默默地改变代码的含义:

码:

  // b.h:
  struct B {};
  struct D : B {};

  // good_user.cc:
  #include "b.h"
  void f(B*);
  void f(void*);
  void test(D* x) { f(x); }  // calls f(B*)
Run Code Online (Sandbox Code Playgroud)

如果#include被B和D的forward decls替换,test()将调用f(void*).

  1. 从标题中声明多个符号的前向可能比简单地#include the header更加冗长.

  2. 构造代码以启用前向声明(例如,使用指针成员而不是对象成员)可以使代码更慢,更复杂.

我特别感兴趣的是第一点,因为我无法想出一个单一的场景,当标题改变时,前向解除将跳过必要的重新编译.谁能告诉我这是怎么发生的?或者这是谷歌代码库固有的东西?

由于这是列表中的第一点,因此它似乎也很重要.

c++ design-guidelines

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