有没有一种简单的方法来触发R中的崩溃?这仅用于测试目的,以查看在后台使用R的某个程序如何对崩溃做出反应并帮助确定是否有一些罕见的问题是由于崩溃造成的.
这是对所有mathematica
标记粉丝的挑战.让我们通过创建一个imgur上传器将图像插入到Mathematica的SO帖子中更加方便.
我们如何创建一个imgur[g_]
将光栅化其参数的函数(确保最终大小不超过StackOverflow帖子的宽度),将其转换为PNG,将其上传到imgur,并返回准备粘贴的MarkDown行,如
?
有用的参考:
我没有调整后一种方法来上传图像而不先将其导出到文件中.
警告,小心使用!StackOverflow使用单独的imgur安装,可以无限期地保留图像.如果你使用主要的imgur,如果没有人看到它们,图像将在6个月后消失.不幸的是,截至2011年11月,似乎没有正式的方式以编程方式将图像上传到StackOverflow.
更新: 请参阅下面的解决方案,直接上传到StackOverflow .
假设我有这样的POD类型:
struct A {
char a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
在我的系统上,sizeof(A) == 8
即使sizeof(char) == 1
和sizeof(b) == 4
.这意味着数据结构有3个未使用的字节.
现在假设我们这样做
A x = ...;
A y =x;
Run Code Online (Sandbox Code Playgroud)
题:
难道是保证所有8个字节的x
和y
将是相同的,即使是那些3分未使用的?
同样,如果我将某些A
对象的底层字节转移到另一个不理解其含义或结构的程序,并将它们视为一个8字节的数组,那么其他程序可以安全地比较两个A
s的相等吗?
注意:在使用gcc 7的实验中,似乎会复制这些字节.我想知道这是否有保证.
我有两个相关的问题:
使用Boost程序选项允许传递一系列值的最简单方法是什么?我的目标是避免prog --opt 1 --opt 2 --opt 3
和prog --opt 1 2 3
反而.
什么是有需要的选项最简单的方法正好两个数字,如prog --opt 137 42
?
(我不需要任何"免费"程序参数.)
在类中定义的友元函数的完全限定名称是什么?
我最近看到了一个类似于以下的例子.以下完全限定名称是val()
什么?
#include <iostream>
namespace foo {
class A {
int x;
public:
A(int x = 0) : x(x) { }
friend int val(const A &a) { return a.x; }
};
}
int main() {
foo::A a(42);
// val() found using ADL:
std::cout << val(a) << std::endl;
// foo::val(a); // error: 'val' is not a member of 'foo'
// foo::A::val(a); // error: 'val' is not a member of 'foo::A'
return 0;
}
Run Code Online (Sandbox Code Playgroud)
参数依赖查找是唯一val()
可以找到的方法吗?
不可否认,这并非源于实际问题.我只是希望获得更好的理解.
是否有任何无损压缩方法可以应用于浮点时间序列数据,并且将显着优于比如将数据作为二进制文件写入文件并通过gzip运行?
降低精度可能是可以接受的,但它必须以受控方式发生(即我必须能够设置必须保留多少位数的界限)
我正在处理一些大型数据文件,这些文件是一系列相关的double
s,描述了时间的函数(即值是相关的).我通常不需要完全double
精确但我可能需要更多float
.
由于图像/音频有专门的无损方法,我想知道是否存在任何专门用于这种情况的方法.
澄清: 我正在寻找现有的实用工具,而不是描述如何实现这样的东西的论文.在速度上与gzip相当的东西会很棒.
我正在移植一些C99代码,这些代码大量使用可变长度数组(VLA)到C++.
我用一个在堆上分配内存的数组类替换了VLA(堆栈分配).业绩受到巨大影响,放缓了3.2倍(见下面的基准). 我可以在C++中使用什么快速的VLA替换?我的目标是在重写C++代码时尽量减少性能损失.
向我建议的一个想法是编写一个数组类,其中包含类中的固定大小的存储(即可以是堆栈分配)并将其用于小型数组,并自动切换到更大数组的堆分配.我的实现是在帖子的最后.它工作得相当好,但我仍然无法达到原始C99代码的性能.为了接近它,我必须将这个固定大小的存储空间(MSL
下面)增加到我不熟悉的尺寸.即使对于许多不需要它的小型数组,我也不想在堆栈上分配太大的数组,因为我担心它会触发堆栈溢出.C99 VLA实际上不太容易发生这种情况,因为它永远不会使用比所需更多的存储空间.
我遇到了std::dynarray
,但我的理解是它没有被标准接受(但是?).
我知道clang和gcc在C++中支持VLA,但我也需要它与MSVC一起工作.事实上,更好的可移植性是重写为C++的主要目标之一(另一个目标是将程序(最初是命令行工具)转换为可重用的库).
MSL
指的是我在其上切换到堆分配的数组大小.我对1D和2D数组使用不同的值.
原始C99代码:115秒.
MSL = 0(即堆分配):367秒(3.2x).
1D-MSL = 50,2D-MSL = 1000:187秒(1.63x).
1D-MSL = 200,2D-MSL = 4000:143秒(1.24x).
1D-MSL = 1000,2D-MSL = 20000:131(1.14x).
增加MSL
进一步提高性能,但最终程序将开始返回错误的结果(我假设由于堆栈溢出).
这些基准测试是在OS X上使用clang 3.7,但是gcc 5显示了非常相似的结果.
这是我使用的当前"小向量"实现.我需要1D和2D矢量.我切换到大小超过堆分配MSL
.
template<typename T, size_t MSL=50>
class lad_vector {
const size_t len;
T sdata[MSL];
T *data;
public:
explicit lad_vector(size_t len_) : len(len_) {
if (len <= MSL)
data = &sdata[0];
else
data = new …
Run Code Online (Sandbox Code Playgroud) c++ arrays performance variable-length-array stack-allocation
我想更多地了解低级代码优化,以及如何利用底层机器架构.我正在寻找关于在哪里阅读有关此主题的好指示.
更多细节:
我感兴趣的是在C/C++等低级语言中进行科学计算(大量数字处理,但不仅仅是)的优化.我特别感兴趣的是那些不明显的优化方法,除非人们对机器的工作原理有很好的了解(我还没有).
例如,很明显,更好的算法更快,而不知道它运行的机器的任何信息.如果首先在矩阵的行或行中循环,那么这一点并不明显.(最好循环遍历矩阵,以便连续读取存储在相邻位置的元素.)
关于该主题的基本建议或文章指针是最受欢迎的.
答案
得到了许多伟大指针的答案,比我有时间阅读的要多得多.这是所有这些的列表:
我需要一点时间来决定使用哪一个(没有时间).
cppreference有这样的说明std::vector::data
:
返回指向用作元素存储的基础数组的指针.指针使得范围
[data(); data() + size())
始终是有效范围,即使容器为空.
"有效范围"到底意味着什么?data()
如果向量是零长度会返回什么?
具体来说,对于零长度矢量:
data()
成为空指针吗?我正在使用一个带有数组的C库,即使对于零长度数组也不允许空指针.但是,如果数组长度为零,它实际上不会取消引用数组存储指针,它只检查它是否为NULL
.我想确保我可以安全地传递data()
给这个C库,所以唯一相关的问题是上面的(1).(2)和(3)只是出于好奇而出现类似情况.
更新
根据未转化为答案的评论,我们可以尝试以下程序:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
cout << v.data() << endl;
v.push_back(1);
cout << v.data() << endl;
v.pop_back();
cout << v.data() << endl;
v.shrink_to_fit();
cout << v.data() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用我的编译器输出:
0x0
0x7f896b403300
0x7f896b403300
0x0
Run Code Online (Sandbox Code Playgroud)
这表明:
data()
确实可以是空指针,因此答案是(1)是(2)否(3)否
但它并不总是零大小向量的空指针
是的,显然我应该在问之前尝试过这个.
如何在Anaconda基础环境中更新Python?Python 是否打算在基础环境中进行升级,还是应该完全删除并重新安装 Anaconda?任何版本最终都会停止支持,因此应该有一些解决方案。
到目前为止我已经尝试过,但没有导致 Python 更新:
conda update --all
conda update python
和conda update anaconda
conda install python=3.9
或者conda install anaconda=2021.11
一个半小时后还没有完成。mamba install python=3.9
结果是“软件包 python_abi-3.7-2_cp37m 需要 python 3.7.*,但无法安装任何提供程序”c++ ×6
performance ×2
anaconda ×1
arrays ×1
boost ×1
c ×1
compression ×1
conda ×1
crash ×1
friend ×1
imgur ×1
jlink ×1
name-lookup ×1
namespaces ×1
numerical ×1
optimization ×1
post ×1
python ×1
r ×1
time-series ×1
vector ×1