小编And*_*zos的帖子

用于完成稀疏矩阵数据的机器学习算法

我在这里看到了一些机器学习问题所以我想我会发布一个相关的问题:

假设我有一个数据集,运动员参加10公里和20公里的丘陵比赛的比赛,即每场比赛都有自己的困难.

用户的完成时间几乎与每次比赛的正常分布相反.

可以将此问题写为矩阵:

       Comp1 Comp2 Comp3
User1  20min  ??   10min

User2  25min 20min 12min

User3  30min 25min ??

User4  30min ??    ??
Run Code Online (Sandbox Code Playgroud)

我想完成上面的矩阵,其大小为1000x20,稀疏度为8%(!).

应该有一种非常简单的方法来完成这个矩阵,因为我可以计算每个用户(能力)的参数和每个竞争的参数(mu,lambda of distribution).此外,比赛之间的相关性非常高.

我可以利用排名User1 <User2 <User3和Item3 << Item2 <Item1

你能不能给我一个暗示我可以使用的方法?

algorithm machine-learning data-mining

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

给Linux用户git访问但不是shell访问?

我想给几个不同的人提交访问权限,每个人都可以访问我自己的Linux服务器上独立的git存储库.

一种方法是:

foreach user x
    adduser x
    create /home/x/repo.git
    ask user x to clone from ssh://myserver.com/home/x/repo.git
Run Code Online (Sandbox Code Playgroud)

然而,这会产生不良影响,他们也可以通过ssh登录.我不想给他们shell访问权限.

反正有没有以类似的方式设置它,但纯粹给他们git提交访问而不是shell访问?

linux git ssh

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

区分C++ 11原始类型名称和typedef-name?

无论如何要区分类型的原始名称和该类型的typedef-name?

例如:

class C1 {};

typedef C1 C2;
Run Code Online (Sandbox Code Playgroud)

C1和C2现在都命名相同的类型.在上述代码之后的代码中,是否有一种情况是,参考所讨论的类型的名称C1的出现不能用C2替换(反之亦然)?

c++ c++11

7
推荐指数
2
解决办法
352
查看次数

用户定义类型的 std::format ?

在 C++20 中 - 如何使用户定义的类型与 兼容std::format

例如,假设我有一个名为 的类型Point

struct Point {
    int x;
    int y;
};
Run Code Online (Sandbox Code Playgroud)

operator<<定义:

inline std::ostream&
operator<<(std::ostream& o, Point pt)
{ return o << "[" << pt.x << << ", " << pt.y << "]"; }
Run Code Online (Sandbox Code Playgroud)

那么下面的程序会输出Hello [3, 4]!吗?

int main() {
   Point pt{3,4};
   std::cout << std::format("Hello {}!\n", pt);
}
Run Code Online (Sandbox Code Playgroud)

如果是 - 为什么以及如何?

如果不是 - 我必须在 to 的定义中添加什么Point才能使其工作?

c++ c++20 fmt

7
推荐指数
2
解决办法
734
查看次数

是否存在“double”、“K”类型的值,使得“K * K == 3.0”?

double是否存在类型(IEEE 64 位浮点/二进制64)的值,K使得K * K == 3.0?(无理数当然是“3的平方根”)

我试过:

static constexpr double Sqrt3 = 1.732050807568877293527446341505872366942805253810380628055806;
static_assert(Sqrt3 * Sqrt3 == 3.0);
Run Code Online (Sandbox Code Playgroud)

但静态断言失败。

(我猜测下一个更高或下一个更低的浮点可表示数字在3.0四舍五入后都不是平方?还是浮点文字的解析器很愚蠢?或者它在 IEEE 标准中可行,但快速数学优化将其搞砸了? )

我认为数字是正确的:

$ python

>>> N = 1732050807568877293527446341505872366942805253810380628055806
>>> N * N
2999999999999999999999999999999999999999999999999999999999996\
607078976886330406910974461358291614910225958586655450309636
Run Code Online (Sandbox Code Playgroud)

更新

我发现:

static_assert(Sqrt3 * Sqrt3 < 3.0); // pass
static_assert(Sqrt3 * Sqrt3 > 2.999999999999999); // pass
static_assert(Sqrt3 * Sqrt3 > 2.9999999999999999); // fail
Run Code Online (Sandbox Code Playgroud)

所以文字必须产生下一个较低的值。

我想我需要检查下一个更高的值。也许可以对表示进行位转储,然后增加尾数的最后一位。

更新2

对于后代:我最终将其用于 Sqrt3 常数和测试:

static constexpr double Sqrt3 = 1.7320508075688772;
static_assert(0x1.BB67AE8584CAAP+0 …
Run Code Online (Sandbox Code Playgroud)

c c++ math floating-point ieee-754

7
推荐指数
3
解决办法
445
查看次数

__float128需要什么样的printf精度才能丢失信息?

我正在尝试使用libquadmath打印__float128,例如:

quadmath_snprintf(s, sizeof(s), "%.30Qg", f);
Run Code Online (Sandbox Code Playgroud)

有以下三个constaints:

  1. 输出必须符合以下生产:

     number = [ minus ] int [ frac ] [ exp ]
    
     decimal-point = %x2E       ; .
    
     digit1-9 = %x31-39         ; 1-9
    
     e = %x65 / %x45            ; e E
    
     exp = e [ minus / plus ] 1*DIGIT
    
     frac = decimal-point 1*DIGIT
    
     int = zero / ( digit1-9 *DIGIT )
    
     minus = %x2D               ; -
    
     plus = %x2B                ; +
    
     zero = %x30                ; 0
    
    Run Code Online (Sandbox Code Playgroud)
  2. 给定任何输入__float128"i"已经打印到匹配上述生产"s"的字符串,然后"s"被扫描回到__float128"j" - "i"必须与"j"按位相同 - 即不应丢失任何信息.对于至少某些值,这是不可能的(NaN,Infinity),这些值的完整列表是什么?

  3. 应该没有其他字符串满足上述两个标准,比候选人短.

是否有满足上述要求的quadmath_snprintf格式字符串(尽可能为1,3和2)?如果是这样的话是什么? …

c floating-point gcc glibc

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

C++ 11:在传值参数的初始化中转换构造函数和转换函数之间的歧义?

#include <iostream>
using namespace std;

struct Y;

struct X
{
    X(const Y&) { cout << "converting constructor" << endl; }
};

struct Y
{
    operator X() { cout << "conversion function" << endl; }
};

void f(X x) {}

int main()
{
    Y y;
    f(y);
}
Run Code Online (Sandbox Code Playgroud)

在上面,转换函数由我的编译器(gcc 4.6.1)优先于转换构造函数,但是在标准中它声明:

用户定义的转换仅在明确无误的情况下应用

在这种情况下似乎存在歧义.任何人都可以解释这个矛盾吗?

我原本以为不能编译.几年前我也非常肯定Scott Meyers写了这个具体的例子,并说它不会编译.我错过了什么?

c++ copy-constructor language-lawyer implicit-conversion c++11

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

通过nfs共享的mmap文件?

情景A:

要在同一主机上运行的两个进程之间共享读/写内存块,Joe会从两个进程中映射相同的本地文件.

情景B:

为了在两个不同主机上运行的两个进程之间共享读/写内存块,Joe在主机之间通过nfs共享文件,然后从两个进程mmaps共享文件.

有人试过Scenario B吗?场景B中出现的哪些额外问题不适用于场景A?

linux memory-management nfs mmap shared-memory

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

C++ 11:Variadic模板函数参数包扩展执行顺序

请考虑以下代码:

template<class T>
size_t f(T t, size_t& x) { return x++; }

template<class... Args>
void g(Args... args)
{
    size_t x = 0;
    size_t y[] = { f(args, x)... };

    for (size_t i = 0; i < sizeof...(args); i++)
        assert(y[i] == i);
}
Run Code Online (Sandbox Code Playgroud)

C++ 11标准保证的断言不会触发吗?为什么或者为什么不?

c++ variadic-functions variadic-templates c++11

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

确定两个文件路径是否指向Linux/C下的同一文件?

在Linux下,我有两个文件路径A和B:

const char* A = ...;
const char* B = ...;
Run Code Online (Sandbox Code Playgroud)

我现在想确定,我应该open(2)两个......

int fda = open(A, ...);
int fdb = open(B, ...);
Run Code Online (Sandbox Code Playgroud)

...我会在文件系统中打开两个文件句柄到同一个文件吗?

为了确定这一点,我想到了stat(2):

struct stat
{
    dev_t st_dev;
    ino_t st_ino;
    ...
}
Run Code Online (Sandbox Code Playgroud)

像(伪代码)的东西:

bool IsSameFile(const char* sA, const char* sB)
{
    stat A = stat(sA);
    stat B = stat(sB);

    return A.st_dev == B.st_dev && A.st_ino == B.st_ino;
}
Run Code Online (Sandbox Code Playgroud)

有没有A和B是同一个文件但IsSameFile会返回false的情况?

是否有任何情况下A和B是不同的文件但IsSameFile会返回true?

有没有更好的方法来做我想做的事情?

c linux filesystems stat

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