小编pir*_*iri的帖子

如何将NULL视为带有pandas的普通字符串?

我有一个带有字符串的列的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?可以假定该文件不包含任何实际缺失的值.

python csv string dataframe pandas

28
推荐指数
3
解决办法
4090
查看次数

将单个参数传递给期望迭代器范围的函数

考虑接受一个或多个参数(例如文件名)的函数.为了使其具有通用性,将其编写为通用迭代器范围是有利的:

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)

但这个解决方案对我来说似乎很笨拙和浪费.

问题:是否有更好的低开销方法来创建单个变量的迭代器范围兼容表示?

c++ iterator stl iterator-range

21
推荐指数
3
解决办法
1707
查看次数

未使用变量的单下划线替代方案

在 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如果在同一命名空间中使用一次性变量的名称约定是什么?

python naming-conventions gettext

8
推荐指数
0
解决办法
548
查看次数

带有动态共享内存的模板化CUDA内核

我想在一个程序中调用带有动态分配的共享内存模板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++ cuda

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

变量在其定义中的自我分配

以下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)

被编译器吞噬了.

现在我的问题是:为什么这样的初始化合法?是否有任何实际的用例,或者它只是语言的一般设计的结果?

c++

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

通过自定义比较查找不同类型值的std :: set元素

考虑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.那可能吗?

c++ stl set

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

模板函数中的类型相关常量

我想在模板化函数中使用静态数组,其长度取决于函数专用的类型.我的第一次尝试是:

标题:

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)

它编译没有问题.

题:

代码有什么问题,有哪些替代方案可以实现所需的行为?我不想在运行时分配内存...

c++ arrays templates template-specialization

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

在Python 3中逐行读取文件时捕获异常

请考虑以下代码:

with open('file.txt', 'r') as f:
    for line in f:
        print(line)
Run Code Online (Sandbox Code Playgroud)

在Python 3中,解释器尝试解码它读取的字符串,这可能会导致异常UnicodeDecodeError.这些当然可以try ... except在整个循环中用块来捕获,但我想在每个行的基础上处理它们.

问题:有没有办法直接捕获和处理读取的每一行的异常?希望没有改变过多迭代文件的简单语法?

python io exception python-3.x

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

使用 None 查找最小元素及其在列表中的位置

我有一个数字列表,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参数。

python list min python-3.x

5
推荐指数
1
解决办法
968
查看次数

使用支持CUDA的MPI的要求

我想通过本文所述的支持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)

c c++ cuda mpi

4
推荐指数
2
解决办法
1955
查看次数

使本地 HTTP 服务器无法从外部访问

我想在我的 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)

c linux networking http server

2
推荐指数
1
解决办法
629
查看次数