小编Pet*_*e W的帖子

在x和y坐标的numpy数组中查找最近点的索引

我有两个2d numpy数组:x_array包含x方向的位置信息,y_array包含y方向的位置.

然后我有一长串x,y点.

对于列表中的每个点,我需要找到最接近该点的位置(在数组中指定)的数组索引.

基于这个问题,我天真地产生了一些有效的代码: 在numpy数组中查找最接近的值

import time
import numpy

def find_index_of_nearest_xy(y_array, x_array, y_point, x_point):
    distance = (y_array-y_point)**2 + (x_array-x_point)**2
    idy,idx = numpy.where(distance==distance.min())
    return idy[0],idx[0]

def do_all(y_array, x_array, points):
    store = []
    for i in xrange(points.shape[1]):
        store.append(find_index_of_nearest_xy(y_array,x_array,points[0,i],points[1,i]))
    return store


# Create some dummy data
y_array = numpy.random.random(10000).reshape(100,100)
x_array = numpy.random.random(10000).reshape(100,100)

points = numpy.random.random(10000).reshape(2,5000)

# Time how long it takes to run
start = time.time()
results = do_all(y_array, x_array, points)
end = time.time()
print 'Completed in: ',end-start
Run Code Online (Sandbox Code Playgroud)

我在一个大型数据集上做这个,并且真的想加快一点.谁能优化这个?

谢谢.


更新:解决方案遵循@silvado和@justin的建议(下) …

python algorithm numpy

66
推荐指数
3
解决办法
5万
查看次数

在Python numpy蒙面数组中用最近邻居填写缺失值?

我在Python中使用2D Numpy masked_array.我需要更改屏蔽区域中的数据值,使它们等于最近的未屏蔽值.

NB.如果有多个最接近的未屏蔽值,那么它可以采用任何那些最接近的值(其中一个最简单的代码......)

例如

import numpy
import numpy.ma as ma

a = numpy.arange(100).reshape(10,10)
fill_value=-99
a[2:4,3:8] = fill_value
a[8,8] = fill_value
a = ma.masked_array(a,a==fill_value)

>>> a  [[0 1 2 3 4 5 6 7 8 9]
  [10 11 12 13 14 15 16 17 18 19]
  [20 21 22 -- -- -- -- -- 28 29]
  [30 31 32 -- -- -- -- -- 38 39]
  [40 41 42 43 44 45 46 47 48 49]
  [50 51 52 53 …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy

13
推荐指数
3
解决办法
8424
查看次数

为什么在确实发送消息时MPI_Iprobe返回false?

我想使用MPI_Iprobe来测试具有给定标记的消息是否已经挂起.

但是,MPI_Iprobe的行为并不像我预期的那样.在下面的示例中,我将来自多个任务的消息发送到单个任务(等级0).然后在0级,我等待几秒钟,以便有足够的时间让MPI_Isends完成.然后当我运行MPI_Iprobe时,它返回标志为false.如果我在(阻塞)MPI_Probe之后重复,则返回true.

#include "mpi.h"
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  int rank;
  int numprocs;
  int tag;
  int receive_tag;
  int flag=0;
  int number;
  int recv_number=0;

  MPI_Request request;
  MPI_Status status;

  MPI_Init(&argc,&argv);
  MPI_Comm_rank(MPI_COMM_WORLD,&rank);
  MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

  // rank 0 receives messages, all others send messages
  if (rank > 0 ) {
    number = rank;
    tag = rank;
    MPI_Isend(&number, 1, MPI_INT, 0, tag, MPI_COMM_WORLD,&request); // send to rank 0
    printf("Sending tag : %d \n",tag);
   } 
   else if (rank == 0) {

   sleep(5); …
Run Code Online (Sandbox Code Playgroud)

mpi

11
推荐指数
1
解决办法
4031
查看次数

通过将大型密钥值存储从MySQL迁移到NoSQL DB,我可以期待显着的性能提升吗?

我正在开发一个包含大型科学数据集的数据库.典型的使用场景是每天将大约5GB的新数据写入数据库; 每天也会删除5GB.总数据库大小约为50GB.我正在运行的服务器将无法将整个数据集存储在内存中.

我构建了数据库,使得主数据表只是一个由唯一ID和值组成的键/值存储.

查询通常是大约100个连续值,例如. SELECT Value WHERE ID BETWEEN 7000000 AND 7000100;

我目前正在使用MySQL/MyISAM,这些查询的大小为0.1 - 0.3秒,但最近我发现MySQL可能不是基本上是大型键/值存储的最佳解决方案.

在我开始安装新软件和重写整个数据库的大量工作之前,我想大致了解在使用NoSQL DB(例如Tokyo Tyrant,Cassandra,MongoDB)时是否有可能看到显着的性能提升MySQL用于这些类型的检索.

谢谢

mysql tokyo-cabinet cassandra nosql

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

在Python中第一个','之前连接两个字符串并删除所有内容的最有效方法是什么?

在Python中,我有一个字符串,它是逗号分隔的值列表.例如'5,2,7,8,3,4'

我需要在末尾添加一个新值并删除第一个值,

例如'5,22,7,814,3,4' - > '22,7,814,3,4,1'

目前,我这样做如下:

mystr = '5,22,7,814,3,4'
latestValue='1'
mylist = mystr.split(',')
mystr = ''
for i in range(len(mylist)-1):
   if i==0:
      mystr += mylist[i+1]
   if i>0:
      mystr += ','+mylist[i+1]

mystr += ','+latestValue
Run Code Online (Sandbox Code Playgroud)

这在我的代码中运行了数百万次,并且我已将其识别为瓶颈,因此我热衷于优化它以使其运行更快.

这样做最有效(在运行时方面)?

python algorithm concatenation

6
推荐指数
3
解决办法
636
查看次数

从txt文件中删除重复的行

我正在处理包含由行分隔的数据的大型文本文件(~20MB).大多数数据条目是重复的,我想删除这些重复只保留一个副本.

此外,为了使问题稍微复杂一些,重复一些条目并附加额外的信息.在这种情况下,我需要保留包含额外信息的条目并删除旧版本.

我需要离开这个:

__PRE__
对此:
__PRE__
NB.最后的订单无关紧要.

有效的方法是什么?

我可以使用awk,python或任何标准的linux命令行工具.

谢谢.

python linux awk

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

如何有效地计算numpy中面具中距离最近1的距离?

在numpy我有一个1和0的2d数组.我需要计算一个新的数组(相同的维度),其中每个元素包含距离掩码数组中相应点最近的1的距离.

例如

a=np.array(
[[1,1,0],
[1,0,0],
[1,0,0]])
Run Code Online (Sandbox Code Playgroud)

我需要b看起来像这样:

array([[0,0,1],
       [0,1,1.41],
       [0,1,2]])
Run Code Online (Sandbox Code Playgroud)

PS.我将在非常大的阵列上执行此操作,因此效率越高越好!谢谢!

python algorithm numpy scipy

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

在python中读取逗号分隔文件(包括日期时间)的最快方法

我有数据存储在逗号分隔的txt文件中.其中一列代表日期时间.

我需要将每个列加载到单独的numpy数组中(并将日期解码为python datetime对象).

最快的方法是什么(就运行时而言)?

NB.这些文件是几百MB的数据,目前需要几分钟才能加载.

例如mydata.txt

15,3,0,2003-01-01 00:00:00,12.2
15,4.5,0,2003-01-01 00:00:00,13.7
15,6,0,2003-01-01 00:00:00,18.4
15,7.5,0,2003-01-01 00:00:00,17.9
15,9,0,2003-01-01 00:00:00,17.7
15,10.5,0,2003-01-01 00:00:00,16.3
15,12,0,2003-01-01 00:00:00,17.2
Run Code Online (Sandbox Code Playgroud)

这是我当前的代码(它有效,但很慢):

import csv
import datetime
import time
import numpy

a=[]
b=[]
c=[]
d=[]
timestmp=[]

myfile = open('mydata.txt',"r")

# Read in the data
csv_reader = csv.reader(myfile)
for row in csv_reader:
  a.append(row[0])
  b.append(row[1])
  c.append(row[2])
  timestmp.append(row[3])
  d.append(row[4])

a = numpy.array(a)
b = numpy.array(b)
c = numpy.array(c)
d = numpy.array(d)

# Convert Time string list into list of Python datetime objects
times = [] …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

标签 统计

python ×6

numpy ×4

algorithm ×3

scipy ×2

awk ×1

cassandra ×1

concatenation ×1

linux ×1

mpi ×1

mysql ×1

nosql ×1

tokyo-cabinet ×1