小编Ano*_*ous的帖子

如何正确掩盖numpy 2D阵列?

假设我有一个二维坐标数组,看起来像

x = array([[1,2],[2,3],[3,4]])

以前在我的工作到目前为止,我生成了一个面具,最终看起来像

mask = [False,False,True]

当我尝试在2D坐标向量上使用此蒙版时,出现错误

newX = np.ma.compressed(np.ma.masked_array(x,mask))

>>>numpy.ma.core.MaskError: Mask and data not compatible: data size 
   is 6, mask size is 3.`
Run Code Online (Sandbox Code Playgroud)

我认为这是有道理的.所以我试着简单地使用以下面具:

mask2 = np.column_stack((mask,mask))
newX = np.ma.compressed(np.ma.masked_array(x,mask2))
Run Code Online (Sandbox Code Playgroud)

我得到的是接近:

>>>array([1,2,2,3])

我期望(和想要):

>>>array([[1,2],[2,3]])

必须有一个更简单的方法来做到这一点?

python numpy mask matrix masked-array

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

Python多处理:如何知道使用Pool还是Process?

所以我有一个我正在编写的算法,该函数multiprocess应该调用另一个函数,CreateMatrixMp()并行调用与cpus一样多的进程.我以前从未做过多处理,也不能确定以下哪种方法更有效.在函数的上下文中使用"高效"这个词CreateMatrixMp()需要被调用数千次.我已经阅读了python multiprocessing模块的所有文档,并且已经有了这两种可能性:

首先是使用这个Pool类:

def MatrixHelper(self, args):
    return self.CreateMatrix(*args)

def Multiprocess(self, sigmaI, sigmaX):

    cpus = mp.cpu_count()
    print('Number of cpu\'s to process WM: %d' % cpus)
    poolCount = cpus*2
    args = [(sigmaI, sigmaX, i) for i in range(self.numPixels)]

    pool = mp.Pool(processes = poolCount, maxtasksperchild= 2)
    tempData = pool.map(self.MatrixHelper, args)
    pool.close()
    pool.join()
Run Code Online (Sandbox Code Playgroud)

接下来是使用这个Process类:

def Multiprocess(self, sigmaI, sigmaX):

    cpus = mp.cpu_count()
    print('Number of cpu\'s to process WM: %d' % cpus)

    processes = [mp.Process(target …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing threadpool

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

NumPy布尔数组警告?

我有几个numpy的阵列,让说a,bc,并创建了一个mask适用于所有的人.

我试图掩盖它们:

a = a[mask]

哪里mask是一个bool数组.值得注意的是,我已经证实了这一点

len(a) = len(b) = len(c) = len(mask)

我收到了一个相当神秘的警告:

FutureWarning: in the future, boolean array-likes will be handled as a boolean array index

python arrays boolean numpy bitmask

9
推荐指数
1
解决办法
4877
查看次数

Python 多处理在类中/使用任何类实例几乎不可能完成。它的预期用途是什么?

我有一个我试图并行化的算法,因为串行运行时间很长。然而,需要并行化的函数在一个类中。multiprocessing.Pool似乎是最好和最快的方式来做到这一点,但有一个问题。它的目标函数不能是对象实例的函数。意思是这个;您可以Pool通过以下方式声明 a :

import multiprocessing as mp
cpus = mp.cpu_count()
poolCount = cpus*2
pool = mp.Pool(processes = poolCount, maxtasksperchild = 2)
Run Code Online (Sandbox Code Playgroud)

然后实际使用它:

pool.map(self.TargetFunction, args)
Run Code Online (Sandbox Code Playgroud)

但这会引发错误,因为无法对对象实例进行腌制,因为该Pool函数确实会将信息传递给其所有子进程。但我必须使用self.TargetFunction

所以我有一个想法,我将创建一个名为的新 Python 文件,parallel并简单地编写几个函数而不将它们放在一个类中,然后从我的原始类(我想并行化其函数)中调用这些函数

所以我试过这个:

import multiprocessing as mp

def MatrixHelper(args):
    WM = args[0][0]
    print(WM.CreateMatrixMp(*args))
    return WM.CreateMatrixMp(*args)

def Start(sigmaI, sigmaX, numPixels, WM):

    cpus = mp.cpu_count()
    poolCount = cpus * 2
    args = [(WM, sigmaI, sigmaX, i) for i in range(numPixels)]
    print('Number of cpu\'s …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multiprocessing threadpool

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

PyQt QWidget窗口在显示后立即关闭?

我意识到这个问题之前已经问了好几次,虽然它们似乎都不适用于我的情况.我已经安装了PyQt,我只是试图打开一个窗口:

import sys
from PyQt4 import QtGui as qt

segmentation = qt.QApplication(sys.argv)
main = qt.QWidget()
main.show()
Run Code Online (Sandbox Code Playgroud)

我在这里看到的所有其他问题通常都是由窗口超出范围的错误引起的,因为窗口的show方法是从函数内部调用的,或类似的东西.

我的代码根本不使用任何功能,所以这不是问题.这应该按原样工作,不是吗?我正在关注本教程:

https://www.youtube.com/watch?v=JBME1ZyHiP8

在时间8:58,教练几乎完全按照我所写的内容,他们的窗口出现并且保持良好状态.矿井显示几分之一秒然后关闭.

从视频中截取代码块的屏幕截图,与此处提供的代码块进行比较:

有效的演示代码

python user-interface qt4 pyqt

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

使用NumPy多次对大型数组进行采样的有效方法?

如果您不关心我正在尝试实施的细节,只需跳过较低的水平线

我正在尝试使用NumPy对某些统计信息进行自举错误估计.我有一个数组x,并希望计算f(x)错误分析中常见的高斯假设不成立的统计量的误差.x非常大.

为此,我x使用重新采样numpy.random.choice(),其中我的重新采样的大小是原始数组的大小,替换:

resample = np.random.choice(x, size=len(x), replace=True)

这让我有了新的认识x.此操作现在必须重复约1,000次,以提供准确的误差估计.如果我生成这种性质的1,000个重新采样;

resamples = [np.random.choice(x, size=len(x), replace=True) for i in range(1000)]

然后计算f(x)每个实现的统计量;

results = [f(arr) for arr in resamples]

然后我推断出f(x)类似的错误

np.std(results)

这个想法是,尽管使用高斯误差分析无法描述f(x) 自身,但是f(x)受随机误差影响的措施的分布可以是.


好的,这是一个引导程序.现在,我的问题是那条线

resamples = [np.random.choice(x, size=len(x), replace=True) for i in range(1000)]

对于大型阵列来说非常慢.没有列表理解,有更聪明的方法吗?第二个清单理解

results = [f(arr) for arr in resamples]

也可能很慢,具体取决于功能的细节f(x).

python statistics optimization numpy list-comprehension

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

找到缺少的C代码,给定汇编代码?

代码是

int f(int x, int y, int z) {
  if (/* missing code here */)
    return z;
  else
    return -z;
}
Run Code Online (Sandbox Code Playgroud)

组装是

    pushl %ebp
    movl %esp, %ebp
    movl 8(%ebp), %eax
    cmpl 12(%ebp), %eax
    jge .L2
    movl 16(%ebp), %eax
    jmp .L3
.L2:
    movl 16(%ebp), %eax
    negl %eax
.L3:
    popl %ebp
    ret
Run Code Online (Sandbox Code Playgroud)

这个问题要求我找出缺少的测试表达式必须产生给出的汇编代码.好的,够容易的.有一个明显的比较之间正在进行的xy.如果jge操作员要将跳跃预先形成循环体12(%ebp) > %eax.

可能的选择是

x<=y x>=y x>y x<y

我的回答是x<=y,因为它12(%ebp)是一个参考y,它是目的地.但这个答案是错误的,我不知道如何.任何提示?非常感谢.

c x86 assembly

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

将NumPy对象与"无"进行比较时的FutureWarning

我有一个函数接收一些参数,加上一些可选参数.在其中,所采取的行动取决于是否c填写了可选参数:

def func(a, b, c = None):

    doStuff()

    if c != None:
        doOtherStuff()
Run Code Online (Sandbox Code Playgroud)

如果c没有通过,那么这很好.然而,在我的背景下,如果c 通过,将永远是一个numpy数组.并比较numpy数组以None产生以下警告:

FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.
Run Code Online (Sandbox Code Playgroud)

那么,在c没有比较的情况下,检查是否通过的最简洁,最通用的方法是None什么?

python arrays numpy

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

如何使用 C 的 mmap() 更改文本文件中的字符?

假设我将标准的“Hello, World! \n”保存到名为 hello.txt 的文本文件中。如果我想将“H”更改为“R”或其他内容,我可以使用 mmap() 来实现吗?

c

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

如何将元组附加到numpy数组而不是按元素方式执行?

如果我试试

x = np.append(x, (2,3))

元组(2,3)没有得到追加到数组的末尾,而23获得单独附加,即使我最初宣布x

x = np.array([], dtype = tuple)

要么

x = np.array([], dtype = (int,2))

这样做的正确方法是什么?

python arrays numpy

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