小编Kon*_*lph的帖子

如何用std :: bind()创建数据成员?

我用C++ 11很好的新生成器和发行版生成随机值.在一个函数中,它就像一个魅力,看起来像这样:

void foo() {
   mt19937 generator;
   uniform_int_distribution<unsigned> distribution;
   auto dice = bind(distribution, generator);
   // dice() will now give a random unsigned value
}
Run Code Online (Sandbox Code Playgroud)

但是,如何将所有三个对象作为数据成员放在一个类中呢?我可以简单地编写generatordistribution作为数据成员,但是如何在dice不知道(或想知道)其确切类型的情况下创建数据成员?这令人惊讶

class X {
   mt19937 generator;
   uniform_int_distribution<unsigned> distribution;
   decltype(bind(distribution, generator)) dice;
};
Run Code Online (Sandbox Code Playgroud)

error C2660: 'bind' : function does not take 2 arguments在Visual Studio 2013中产生错误.

c++ member stdbind c++11

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

函数执行时间

我想找出在 Linux 上用 C++ 编写的函数的执行时间。我发现了很多与此相关的帖子。我尝试了此链接计时器方法中提到的所有方法来计算时间。以下是我的函数的执行时间结果:

time() :           0 seconds 
clock() :          0.01 seconds
gettimeofday() :   0.002869 seconds
rdtsc() :          0.00262336 seconds
clock_gettime() :  0.00672151 seconds
chrono :           0.002841 seconds 
Run Code Online (Sandbox Code Playgroud)

请帮助我哪种方法的读数可靠,因为所有结果的读数都不同。我读到您的操作系统正在不同的任务之间切换,因此不能期望读数非常准确。有没有一种方法可以计算 CPU 在我的函数上花费的时间。我听说过分析工具的使用,但还没有找到任何函数的示例。请指导我。

c++ linux profiling

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

这个警告与枚举类大小有关吗?

警告:

src/BoardRep.h:49:12: warning: ‘BoardRep::BoardRep::Row::<anonymous struct>::a’ 
is too small to hold all values of ‘enum class BoardRep::Piece’ 
[enabled by default]
Piece a:2;
        ^
Run Code Online (Sandbox Code Playgroud)

枚举:

enum class Piece: unsigned char {
    EMPTY,
    WHITE,
    BLACK
};
Run Code Online (Sandbox Code Playgroud)

使用:

union Row {
    struct {
        Piece a:2;
        Piece b:2;
        Piece c:2;
        Piece d:2;
        Piece e:2;
        Piece f:2;
        Piece g:2;
        Piece h:2;
    };
    unsigned short raw;
};
Run Code Online (Sandbox Code Playgroud)

如果enum我同意GCC,它可能不得不截断,但这是因为enums与整数和预处理器定义并没有真正分开.然而,一个enum class更强大.如果它不够强大,不能假设所有Piece取整数值都在0到2之间,则警告是有意义的.否则海湾合作委员会将不必要地挑剔,可能值得邮寄清单说"看,这是一个愚蠢的警告"

任何人都看不到这一点

您可以在2位数据中存储4个不同的值,我只需要3个不同的值,因此任何长度为4或更小的枚举应该很好地适合给定的2位(并且我的枚举确实"派生"(更好的术语?)来自无符号类型).如果我有5个或更多那么我会期待一个警告.

c++ enums gcc c++11

5
推荐指数
2
解决办法
1249
查看次数

如何不覆盖泛型方法

我试图了解 R 中的 s3 类系统。

文档说我需要为我想要创建的方法创建一个通用函数。

假设我想foo为 class创建一个方法XYZ

有了 R 的所有包,我怎么能确定我没有覆盖以前创建的泛型方法?

总结是一个不好的例子,因为每个人都可能知道它已经存在,但是我的泛型可能已经定义在我已经加载或我将加载的包中。

oop methods r s4 r-s3

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

用多个钥匙收集

我知道之前已经问过这个问题,但我不太明白.

我有一个如下所示的数据集:

Precinct  Crime       2000   2001  2002  2003  
1         Murder       3      1     2     2
1         Rape         12     5     10    11
1         Burglary     252   188    297   403
2         Murder       4      2      1     0 
Run Code Online (Sandbox Code Playgroud)

以及每年列出的每项犯罪的价值.

我正在尝试将其重新排列为更简单的集合,如下所示:

Precinct    Crime    Year   Value
   1        Murder   2000     3
   1        Rape     2000     12
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?我知道我应该使用tidyr gather,但推断多个键的解决方案并不适合我.

transpose r tidyr

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

dplyr的选择功能出错

当我使用dplyr中的select函数时,它不起作用,并给我一个错误,指出我要选择的列名是未使用的参数。但是,如果我在函数调用之前指定dplyr,例如s:“ dplyr :: select”,则它可以正常工作:

这是一个示例df:

 sampledf <- structure(list(CRN = c(5497L, 6515L, 7248L, 36956L, 37021L), 
        varA = structure(c(2L, 2L, 2L, 2L, 2L), .Label = c("A", 
        "B"), class = "factor"), varB = c(NA_integer_, NA_integer_, 
        NA_integer_, NA_integer_, NA_integer_), VarC = c(NA, NA, 
        NA, NA, 2L), varD = c(NA_integer_, NA_integer_, 
        NA_integer_, NA_integer_, NA_integer_), varE = c(1L, 1L, 4L, NA, NA)), .Names = c("CRN", 
        "varA", "varB", "varC", "varD", "varE"), row.names = c(NA, 5L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

 sample_error <- select(sampledf, varA)
Run Code Online (Sandbox Code Playgroud)

select(sampledf,varA)中的错误:未使用的参数(varA)

这有效:

 sample_working <- …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

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

为什么使用igraph生成的随机网络中的最后一个索引的节点不被过度代表?

我正在使用R接口的R igraph来使用函数生成具有恒定数量的节点n和边缘的随机定向网络(Erdös-Rényi)。msample_gnm

为了确保我了解所使用的算法,尽管没有C方面的经验,但还是检查了C源代码。据我了解C代码,有一条if语句应该导致带有索引的节点的过多表示n接收定向边缘。

这是真实的代码:https : //github.com/igraph/igraph/blob/7d4be976481356fa673772e6e7c30b637ea8dd52/src/games.c#L734-L736 ,这是我如何理解伪代码中的C代码:

# What is the maximum number of edges a network with n nodes could have
maxEdges := n*(n-1)

s := uniformly sample m integers from [1, maxEdges] without replacement

for (i = 1; i = m; i++) {

  # Get IDs for nodes A and B with equal probability over n
  nodeA := floor(s[i] / (n)) + 1
  nodeB := s - ((nodeA …
Run Code Online (Sandbox Code Playgroud)

c r igraph

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

为什么当我在其之前/之后使用 printf() 时,“malloc():损坏的顶部大小”错误会得到修复?

给定一个绝对路径,我试图获取某个目录之后的部分。getTargetPath函数执行此操作,当我编译并运行下面的代码时,该代码给出了预期的输出。

问题是当我删除mainprintf("\n")行之前的内容时malloc,我得到:

malloc():损坏的顶部大小
已中止(核心已转储)

因此,当我在代码行printf("\n")之前或之后放置malloc一个代码似乎工作正常,但当我删除它时,我收到上面的错误。

我的问题是,为什么会发生这种情况?我并不是要求解决路径字符串的问题。我只是想了解导致这种行为的原因。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


const char* getTargetPath(const char* source)
{
    int count = 0;
    int i = 0;

    while(*source)
    {
        if (*source == '/')
        {
            ++count;
            if (count == 4)
            {
                break;
            }
        }
        ++source;
    }

    return source;
}


int main()
{
    const char* backup_path = "/home/ofy/real_2";
    char temp1[] = "/home/dir1/dir2/dir3/dir4/dir5";
    const char* s1 = temp1;

    const char* s2 = getTargetPath(s1);

    printf("\n"); …
Run Code Online (Sandbox Code Playgroud)

c malloc pointers

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

InvalidArgumentError:从形状为 [56,9] 的张量中指定了形状为 [60,9] 的列表

在运行我的模型一个时期后,它崩溃并显示以下错误消息:

InvalidArgumentError:从形状为 [56,9] 的张量中指定了形状为 [60,9] 的列表 [[{{node TensorArrayUnstack/TensorListFromTensor}}]] [[sequential_7/lstm_17/PartitionedCall]] [Op:__inference_train_function_29986]

这发生在我将 LSTM 层更改为stateful=True并且必须传递batch_input_shape参数而不是input_shape

下面是我的代码,我确定它与我的数据形状有关:

test_split = 0.2
history_points = 60
n = int(histories.shape[0] * test_split)

histories_train = histories[:n]
y_train = next_values_normalized[:n]

histories_test = histories[n:]
y_test = next_values_normalized[n:]

next_values_test = next_values[n:]

print(histories_train.shape)
print(y_train.shape)

-->(1421, 60, 9)
-->(1421, 1)

# model architecture

´´´model = Sequential()
model.add(LSTM(units=128, stateful=True,return_sequences=True, batch_input_shape=(60,history_points, 9)))
model.add(LSTM(units=64,stateful=True,return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=32))
model.add(Dropout(0.2))
model.add(Dense(20))
ADAM=keras.optimizers.Adam(0.0005, beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(loss='mean_squared_error', optimizer=ADAM)

model.fit(x=histories_train, y=y_train, batch_size=batchsize, epochs=50, shuffle=False, validation_split=0.2,verbose=1)
´´´
Run Code Online (Sandbox Code Playgroud)

python lstm keras tensorflow recurrent-neural-network

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

如何使用plotlyexpress标记分组条形图?

我想在绘图表达中将数据标签添加到条形图的顶部。我使用数据框中的两个不同列,因此无法使用“颜色”方法。我想为每个栏定义“文本”,以便它在栏顶部显示数据。这是一个 MRE。

import pandas as pd
import plotly.express as px

x = ['Aaron', 'Bob', 'Chris']
y1 = [5, 10, 6]
y2 = [8, 16, 12]

fig = px.bar(x=x, y=[y1,y2],barmode='group')
fig.show()
Run Code Online (Sandbox Code Playgroud)

我试过:

fig = px.bar(x=x, y=[y1,y2],text=[y1,y2], barmode='group')
Run Code Online (Sandbox Code Playgroud)

但这行不通。

python plotly plotly-python

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