我有一个带有字符串的列的csv文件,我想用pandas读取它.在此文件中,字符串null作为实际值出现,不应视为缺失值.
例:
import pandas as pd
from io import StringIO
data = u'strings,numbers\nfoo,1\nbar,2\nnull,3'
print(pd.read_csv(StringIO(data)))
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
strings numbers
0 foo 1
1 bar 2
2 NaN 3
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能将数值null(而不是NaN)纳入DataFrame?可以假定该文件不包含任何实际缺失的值.
考虑接受一个或多个参数(例如文件名)的函数.为了使其具有通用性,将其编写为通用迭代器范围是有利的:
template<class Iter>
void function(Iter first, Iter last)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以通过以下方式调用它,与我们存储参数的方式无关:
WhateverContainer container;
function(std::begin(container), std::end(container));
Run Code Online (Sandbox Code Playgroud)
例如,STL在很大程度上依赖于这种范例.
现在,假设我们想要使用未存储在容器中的单个参数来调用该函数.我们当然可以写:
const int value = 5;
std::vector<int> vec(1, value);
function(std::begin(vec), std::end(vec));
Run Code Online (Sandbox Code Playgroud)
但这个解决方案对我来说似乎很笨拙和浪费.
问题:是否有更好的低开销方法来创建单个变量的迭代器范围兼容表示?
在 Python 中,最好对有意未使用的变量使用单个下划线:
first_word, _ = 'only only is important'.split(' ', 1)
Run Code Online (Sandbox Code Playgroud)
另一方面,gettext使用下划线作为其翻译函数的短别名,如果下划线之前用于变量,则会导致冲突:
print(_('gettext will try to translate this string.'))
Run Code Online (Sandbox Code Playgroud)
问题:gettext如果在同一命名空间中使用一次性变量的名称约定是什么?
我想在一个程序中调用带有动态分配的共享内存的模板化CUDA内核的不同实例.我的第一个天真的方法是写:
template<typename T>
__global__ void kernel(T* ptr)
{
extern __shared__ T smem[];
// calculations here ...
}
template<typename T>
void call_kernel( T* ptr, const int n )
{
dim3 dimBlock(n), dimGrid;
kernel<<<dimGrid, dimBlock, n*sizeof(T)>>>(ptr);
}
int main(int argc, char *argv[])
{
const int n = 32;
float *float_ptr;
double *double_ptr;
cudaMalloc( (void**)&float_ptr, n*sizeof(float) );
cudaMalloc( (void**)&double_ptr, n*sizeof(double) );
call_kernel( float_ptr, n );
call_kernel( double_ptr, n ); // problem, 2nd instantiation
cudaFree( (void*)float_ptr );
cudaFree( …Run Code Online (Sandbox Code Playgroud) 以下C++程序编译得很好(g ++ 5.4至少在调用时发出警告-Wall):
int main(int argc, char *argv[])
{
int i = i; // !
return 0;
}
Run Code Online (Sandbox Code Playgroud)
甚至像
int& p = p;
Run Code Online (Sandbox Code Playgroud)
被编译器吞噬了.
现在我的问题是:为什么这样的初始化合法?是否有任何实际的用例,或者它只是语言的一般设计的结果?
考虑std::set使用自定义比较器的以下玩具示例:
#include <set>
struct A {
A() : a(cnt++) {}
const int a;
static int cnt;
};
int A::cnt = 0;
struct comp {
bool operator()(const A& left, const A& right)
{
return left.a < right.a;
}
};
int main()
{
std::set<A, comp> sa;
for (int i = 0; i < 10; ++i) sa.insert(A());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请注意,A不能简单地从整数创建.
我想找一个A具有给定值的A::ain sa,而不构造一个类型的临时对象A,即我正在寻找类似的东西
sa.find(4)
Run Code Online (Sandbox Code Playgroud)
使用自定义比较器,允许直接比较整数与类型的对象A.那可能吗?
我想在模板化函数中使用静态数组,其长度取决于函数专用的类型.我的第一次尝试是:
标题:
template<typename T>
struct Length {
const static size_t len;
};
template<typename T>
void func(){
static T vars[Length<T>::len]; // len not const. according to compiler!
// ...
}
Run Code Online (Sandbox Code Playgroud)
源文件:
template<> const size_t Length<double>::len = 2;
template<> const size_t Length<float>::len = 1;
// ...
Run Code Online (Sandbox Code Playgroud)
但是,g++不编译这个并抱怨
错误:'vars'的存储大小不是常数
那么问题到底是什么?我知道固定长度数组的大小需要是一个常量并且在编译时已知,但这似乎就是这种情况.当我写作
const size_t len = 2;
void func(){
static double vars[len];
}
Run Code Online (Sandbox Code Playgroud)
它编译没有问题.
题:
代码有什么问题,有哪些替代方案可以实现所需的行为?我不想在运行时分配内存...
请考虑以下代码:
with open('file.txt', 'r') as f:
for line in f:
print(line)
Run Code Online (Sandbox Code Playgroud)
在Python 3中,解释器尝试解码它读取的字符串,这可能会导致异常UnicodeDecodeError.这些当然可以try ... except在整个循环中用块来捕获,但我想在每个行的基础上处理它们.
问题:有没有办法直接捕获和处理读取的每一行的异常?希望没有改变过多迭代文件的简单语法?
我有一个数字列表,None如下所示:
l = [2., None, 3., 1., None, 2., None, 5.]
Run Code Online (Sandbox Code Playgroud)
我想获得最小数字及其索引,而Nones 应该被忽略。对于给定的示例,结果将是:
(1., 3)
Run Code Online (Sandbox Code Playgroud)
当然,编写一个执行我想要的功能的函数很简单,但我更喜欢一些有效的内置方法或至少是高级方法。我对 Python 3 的解决方案特别感兴趣,其中 -functionmin不接受None参数。
我想通过本文所述的支持CUDA的MPI在不同的CUDA设备之间交换数据。据我了解,以下代码应该可以完成这项工作:
#include <mpi.h>
int main( int argc, char *argv[] )
{
int rank;
float *ptr = NULL;
const size_t elements = 32;
MPI_Status status;
MPI_Init( NULL, NULL );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
cudaMalloc( (void**)&ptr, elements * sizeof(float) );
if( rank == 0 )
MPI_Send( ptr, elements, MPI_FLOAT, 1, 0, MPI_COMM_WORLD );
if( rank == 1 )
MPI_Recv( ptr, elements, MPI_FLOAT, 0, 0, MPI_COMM_WORLD, &status );
cudaFree( ptr );
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,该程序在两个进程上执行时由于段错误而崩溃,并给出以下消息:
*** Process received signal *** …Run Code Online (Sandbox Code Playgroud) 我想在我的 Linux 机器上编写一个具有 HTTP 服务器功能的程序,以便它可以与我的浏览器交互以显示格式化输出等。
经过一番研究,我决定使用 libmicrohttpd。使用这个库可以很容易地实现一个非常基本的服务器。根据教程,以下代码已经可以解决问题。
#include <sys/types.h>
#include <sys/select.h>
#include <sys/socket.h>
#include <string.h>
#include <microhttpd.h>
#include <stdio.h>
#define PORT 8888
static int
answer_to_connection(void *cls, struct MHD_Connection *connection,
const char *url, const char *method,
const char *version, const char *upload_data,
size_t *upload_data_size, void **con_cls)
{
const char *page = "<html><body>Hello, browser!</body></html>";
struct MHD_Response *response;
int ret;
response = MHD_create_response_from_buffer(strlen(page), (void*)page,
MHD_RESPMEM_PERSISTENT);
ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
MHD_destroy_response(response);
return ret;
}
int main()
{
struct MHD_Daemon *daemon; …Run Code Online (Sandbox Code Playgroud)