我用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)
但是,如何将所有三个对象作为数据成员放在一个类中呢?我可以简单地编写generator和distribution作为数据成员,但是如何在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中产生错误.
我想找出在 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 在我的函数上花费的时间。我听说过分析工具的使用,但还没有找到任何函数的示例。请指导我。
警告:
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个或更多那么我会期待一个警告.
我试图了解 R 中的 s3 类系统。
文档说我需要为我想要创建的方法创建一个通用函数。
假设我想foo为 class创建一个方法XYZ。
有了 R 的所有包,我怎么能确定我没有覆盖以前创建的泛型方法?
总结是一个不好的例子,因为每个人都可能知道它已经存在,但是我的泛型可能已经定义在我已经加载或我将加载的包中。
我知道之前已经问过这个问题,但我不太明白.
我有一个如下所示的数据集:
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,但推断多个键的解决方案并不适合我.
当我使用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接口的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) 给定一个绝对路径,我试图获取某个目录之后的部分。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) 在运行我的模型一个时期后,它崩溃并显示以下错误消息:
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) 我想在绘图表达中将数据标签添加到条形图的顶部。我使用数据框中的两个不同列,因此无法使用“颜色”方法。我想为每个栏定义“文本”,以便它在栏顶部显示数据。这是一个 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)
但这行不通。