小编dbl*_*iss的帖子

如何一次从数组中删除多个值

有人可以为我提供更好的(更简单,更可读,更Pythonic,更高效等)从数组中删除多个值的方法,而不是以下内容:

import numpy as np

# The array.
x = np.linspace(0, 360, 37)

# The values to be removed.
a = 0
b = 180
c = 360

new_array = np.delete(x, np.where(np.logical_or(np.logical_or(x == a,
                                                              x == b),
                                                x == c)))
Run Code Online (Sandbox Code Playgroud)

这个问题的一个好答案会产生与上面代码相​​同的结果(即new_array),但是在处理浮点数之间的相等性方面可能比上面的代码更好.

奖金

有人可以向我解释为什么会产生错误的结果吗?

In [5]: np.delete(x, x == a)
/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py:3254: FutureWarning: in the future insert will treat boolean arrays and array-likes as boolean index instead of casting it to integer
  "of casting it to integer", FutureWarning)
Out[5]: 
array([ …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

如何在多个进程尝试写入然后同时从文件读取时防止竞争条件

我有以下代码(为简洁起见而简化):

import os
import errno
import imp


lib_dir = os.path.expanduser('~/.brian/cython_extensions')
module_name = '_cython_magic_5'
module_path = os.path.join(lib_dir, module_name + '.so')
code = 'some code'

have_module = os.path.isfile(module_path)
if not have_module:
    pyx_file = os.path.join(lib_dir, module_name + '.pyx')

    # THIS IS WHERE EACH PROCESS TRIES TO WRITE TO THE FILE.  THE CODE HERE 
    # PREVENTS A RACE CONDITION.
    try:
        fd = os.open(pyx_file, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
    except OSError as e:
        if e.errno == errno.EEXIST:
            pass
        else:
            raise
    else:
        os.fdopen(fd, 'w').write(code)

# THIS …
Run Code Online (Sandbox Code Playgroud)

python io race-condition python-import python-os

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

将一个数组的每个元素乘以另一个数组的每个元素

假设我有两个数组,

import numpy as np


x = np.array([1, 2, 3, 4])
y = np.array([5, 6, 7, 8])
Run Code Online (Sandbox Code Playgroud)

获取新数组 的最快、最 Pythonic 等方式是什么,z其元素数量等于x.size * y.size,其中元素是(x_i, y_j)两个输入数组中每对元素的乘积。

换句话说,我正在寻找一个数组,z其中.z[k]x[i] * y[j]

一种简单但低效的方法如下:

z = np.empty(x.size * y.size)
counter = 0
for i in x:
    for j in y:
        z[counter] = i * j
        counter += 1
Run Code Online (Sandbox Code Playgroud)

运行上面的代码可以看出,z在这个例子中是

In [3]: z
Out[3]: 
array([  5.,   6.,   7.,   8.,  10.,  12.,  14.,  16.,  15.,  18., …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy vectorization cartesian-product

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

如何将numpy数组从'float64'转换为'float'

如何将numpy arrayfrom类型转换'float64'为type 'float'?具体来说,我怎么转换整个arraydtype 'float64'dtype 'float'?这可能吗? 在上面的重复思考问题中,标量的答案并没有解决我的问题.

考虑一下:

>>> type(my_array[0])
<type 'numpy.float64'>

>>> # Let me try to convert this to 'float':
>>> new_array = my_array.astype(float)
>>> type(new_array[0])
<type 'numpy.float64'>

>>> # No luck.  What about this:
>>> new_array = my_array.astype('float')
>>> type(new_array[0])
<type 'numpy.float64'>

>>> # OK, last try:
>>> type(np.inf)
<type 'float'>
>>> # Yeah, that's what I want.
>>> new_array = my_array.astype(type(np.inf))
>>> …
Run Code Online (Sandbox Code Playgroud)

python arrays types casting numpy

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

理解 numpy.random.lognormal

我正在将 Matlab 代码(由其他人编写)翻译为 Python。

在 Matlab 代码的一部分中,变量X_new被设置为从对数正态分布中得出的值,如下所示:

% log normal distribution
X_new = exp(normrnd(log(X_old), sigma));
Run Code Online (Sandbox Code Playgroud)

也就是说,从以 为中心的正态分布中抽取一个随机值log(X_old),并将X_new其设置为e提高到该值。

这段代码直接翻译成Python如下:

import numpy as np


X_new = np.exp(np.random.normal(np.log(X_old), sigma))
Run Code Online (Sandbox Code Playgroud)

numpy包括可以直接采样的对数正态分布。

我的问题是,下面的代码行与上面的代码行等效吗?

X_new = np.random.lognormal(np.log(X_old), sigma)
Run Code Online (Sandbox Code Playgroud)

python matlab numpy normal-distribution natural-logarithm

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

仅在两个数组都不为零的情况下,将一个numpy数组除以另一个

仅在两个数组都不为零的情况下,将一个numpy数组除以另一个(形状相同,在元素上相同)的最简单,最Pythonic的方法是什么?

除数或被除数为零时,输出数组中的相应元素应为零。(这是除数为零时的默认输出,而np.nan是除数为零时的默认输出。)

numpy

4
推荐指数
1
解决办法
2037
查看次数

Wolfram Alpha和scipy.integrate.quad给出了相同积分的不同答案

考虑以下功能:

import numpy as np
from scipy.special import erf

def my_func(x):
    return np.exp(x ** 2) * (1 + erf(x))
Run Code Online (Sandbox Code Playgroud)

当我从评估此函数的积分-14-4使用scipyquad功能,我得到以下结果:

In [3]: from scipy import integrate

In [4]: integrate.quad(my_func, -14, -4)
/usr/local/lib/python2.7/dist-packages/scipy/integrate/quadpack.py:289: UserWarning: The maximum number     of subdivisions (50) has been achieved.
  If increasing the limit yields no improvement it is advised to analyze 
  the integrand in order to determine the difficulties.  If the position of a 
  local difficulty can be determined …
Run Code Online (Sandbox Code Playgroud)

python math numpy scipy wolframalpha

4
推荐指数
1
解决办法
987
查看次数

onclick ="document.forms [0] .submit();"之间的区别 和表格提交

在表格里面我有一个按钮.我通过这样的JavaScript提交表单时有什么区别

<button onclick="document.forms[0].submit();">
Run Code Online (Sandbox Code Playgroud)

当我像这样提交时

<button type="submit"></button>?
Run Code Online (Sandbox Code Playgroud)

第一个适用于大多数浏览器,除了基于webkit.后者也可以正常工作.我没有明显的功能差异.有吗?

html javascript

3
推荐指数
1
解决办法
4万
查看次数

在python中评估后缀?

我想编写一个函数来评估作为列表传递的后缀表达式。到目前为止,我有:

def evalPostfix(text):
    s = Stack()
    for symbol in text:
        if symbol in "0123456789":
            s.push(int(symbol))
        if not s.is_empty():
            if symbol == "+":
                plus = s.pop() + s.pop()
            if symbol == "-":
                plus = s.pop() - s.pop()
            if symbol == "*":
                plus = s.pop() * s.pop()
            if symbol == "/":
                plus = s.pop() / s.pop()
Run Code Online (Sandbox Code Playgroud)

但我认为我有错误的方法。帮助?

python postfix-notation

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

在列表中重复多次在另一个列表中指定的项目

我有两个列表,x并且y:

>>> x = [2, 3, 4]
>>> y = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我想用这些来创建一个新列表.新列表将使每个元素x重复由相应元素指定的次数y.因此,期望的输出是

>>> new_list
[2, 3, 3, 4, 4, 4]
Run Code Online (Sandbox Code Playgroud)

元素的顺序new_list对我来说无关紧要.它也不是至关重要的list- 任何序列类型都可以.

实现这一目标的最快,最有效,最恐怖的方法是什么?

python list repeat

3
推荐指数
2
解决办法
1589
查看次数