我想将整数张量转换为布尔值张量。
具体来说,我希望能够拥有一个转换tensor([0,10,0,16])为tensor([0,1,0,1])
这在 Tensorflow 中只需使用tf.cast(x,tf.bool).
我希望强制转换将所有大于 0 的整数更改为 1,并将所有等于 0 的整数更改为 0。这!!在大多数语言中都是等价的。
由于 pytorch 似乎没有专用的布尔类型可以转换,这里最好的方法是什么?
编辑:我正在寻找一个矢量化的解决方案,而不是遍历每个元素。
我的代码中有一个带有类型签名的重载函数:
void foo(std::string);
void foo(std::vector<std::string>);
Run Code Online (Sandbox Code Playgroud)
我希望foo的用户能够使用字符串或字符串列表来调用它
//Use case 1
foo("str");
//Use case 2
foo({"str1","str2","str3"});
foo({"str1","str2","str3","str4"});
Run Code Online (Sandbox Code Playgroud)
问题是当调用者将两个字符串传递给foo的初始值设定项列表时。
//Problem!
foo({"str1","str2"});
Run Code Online (Sandbox Code Playgroud)
对foo的调用是不明确的,因为它匹配两个类型签名。这是因为显然{"str1","str2"}是有效的构造函数std::string
所以我的问题是,在foo的声明或实现中我可以做些什么,以使我维护上面描述的API而不遇到这种模棱两可的构造方法。
我不想定义自己的字符串类,但是可以定义其他东西,而不必定义其他东西,vector<string>只要它可以使用字符串的初始化列表进行初始化即可。
只是出于好奇,为什么字符串构造函数会接受{"str1","str2"}?