小编Han*_*nah的帖子

为什么我不能压制numpy警告

我真的想避免这些恼人的numpy警告,因为我必须处理很多NaNs.我知道这通常是用seterr完成的,但由于某种原因,这里不起作用:

import numpy as np
data = np.random.random(100000).reshape(10, 100, 100) * np.nan
np.seterr(all="ignore")
np.nanmedian(data, axis=[1, 2])
Run Code Online (Sandbox Code Playgroud)

它给了我一个运行时警告,即使我设置numpy忽略所有错误...任何帮助?

编辑(这是收到的警告):

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-p??ackages/numpy/lib/nanfunctions.py:612: RuntimeWarning: All-NaN slice encountered warnings.warn("All-NaN slice encountered", RuntimeWarning)

谢谢 :)

python numpy

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

理解高斯混合模型

我试图理解scikit-learn高斯混合模型实现的结果.看一下下面的例子:

#!/opt/local/bin/python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture

# Define simple gaussian
def gauss_function(x, amp, x0, sigma):
    return amp * np.exp(-(x - x0) ** 2. / (2. * sigma ** 2.))

# Generate sample from three gaussian distributions
samples = np.random.normal(-0.5, 0.2, 2000)
samples = np.append(samples, np.random.normal(-0.1, 0.07, 5000))
samples = np.append(samples, np.random.normal(0.2, 0.13, 10000))

# Fit GMM
gmm = GaussianMixture(n_components=3, covariance_type="full", tol=0.001)
gmm = gmm.fit(X=np.expand_dims(samples, 1))

# Evaluate GMM
gmm_x = np.linspace(-2, 1.5, …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

12
推荐指数
1
解决办法
8849
查看次数

PyCharm print end ='\ r'语句不起作用

关于print语句已经有很多其他问题,但我没有找到问题的答案:

当我做:

for idx in range(10):
    print(idx, end="\r")
Run Code Online (Sandbox Code Playgroud)

在(ipython)终端直接,它工作正常,并始终覆盖前一行.但是,在使用PyCharm的模块中运行时,我看不到stdout中打印的任何行.

这是一个已知的PyCharm问题吗?

python pycharm

11
推荐指数
2
解决办法
6409
查看次数

在 Python 中使用 joblib 并行执行期间抑制警告

我正在使用一个生成警告的函数,我真的不需要阅读。问题是我想并行运行该函数,并且在这样做时,似乎我无法再抑制警告。考虑这个例子:

import warnings
import numpy as np
from joblib import Parallel, delayed

def test(a, b):
    if a * b > 10:
        warnings.warn("You are being warned!!")
    return(a*b)

ii = np.arange(5)
jj = ii + 1

with warnings.catch_warnings():
    warnings.filterwarnings("ignore")
    with Parallel(n_jobs=4) as parallel:
        result = parallel(delayed(test)(i, j) for i, j in zip(ii, jj))
Run Code Online (Sandbox Code Playgroud)

这仍然会产生警告消息...另请注意,在我的情况下,我无法重写该函数test,因为它是从另一个包导入的。有什么办法可以不收到警告信息吗?

python warnings joblib

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

Numpy:与唯一坐标位置对应的值的平均值

所以,我一直在浏览stackoverflow已经很长一段时间了,但我似乎找不到解决问题的方法

考虑一下

import numpy as np
coo = np.array([[1, 2], [2, 3], [3, 4], [3, 4], [1, 2], [5, 6], [1, 2]])
values = np.array([1, 2, 4, 2, 1, 6, 1])
Run Code Online (Sandbox Code Playgroud)

coo数组包含(x,y)坐标位置x =(1,2,3,3,1,5,1)y =(2,3,4,4,2,6,2)

并且值为此网格点排列某种数据.

现在我想获得每个唯一网格点的所有值的平均值.例如,坐标(1,2)出现在位置(0,4,6),所以对于这一点我想要values[[0, 4, 6]].

我怎么能得到所有独特的网格点?

python arrays numpy

10
推荐指数
1
解决办法
1690
查看次数

定义包含哪个类

好吧,这可能是一个非常愚蠢的问题,这可能是不可能的,或者我正在以一种扭曲的方式思考.所以,考虑一下:

class MyClass:
    def __init__(self, x):
        self.x = x
        self.y = self.x ** 2


class MyList:
    def __init__(self, list):
        self.list = list

    def __iter__(self):
        return iter(self.list)

foo = [MyClass(x=1), MyClass(x=2)]
bar = MyList(list=foo)

for i in bar:
    print(i.x, i.y)
Run Code Online (Sandbox Code Playgroud)

好的,这里有两个类:MyClass只是非常普通的东西而且没什么特别的.它有两个实例属性:xy. MyList另一方面,应该是一个定义迭代器的类,它应该只包含第一个类的元素MyClass!

然后我创建两个实例MyClass,将它们放在一个列表中foo,并使用此列表创建MyList(bar)的实例.

现在,传递给的列表MyList应该只包含MyClass元素!我想要的是Python要意识到这个事实!当我编写一个迭代内容的循环时bar,我希望Python知道中的元素barMyClass对象.

我的程序现在的一个主要不便是Python没有意识到这一点,并且自动完成功能不起作用.换句话说:在循环中,当我写i.,我想所有可能的参数弹出(在这种情况下,xy).我可以在Python中定义一些魔术方法MyList,让Python知道这个列表的内容吗?

python

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

matplotlib 极坐标图刻度/轴标签位置

我一直在寻找一种方法来可靠地定位极坐标图中的刻度和轴标签。请看下面的例子:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(figsize=[10, 5])
ax0 = fig.add_axes([0.05, 0.05, 0.4, 0.9], projection="polar")
ax1 = fig.add_axes([0.55, 0.05, 0.4, 0.9], projection="polar")

r0 = np.linspace(10, 12, 10)
theta0 = np.linspace(0, 0.1, 10)

ax0.quiver(theta0, r0, -0.1, 0.1)
ax1.quiver(theta0 + np.pi, r0, -0.1, 0.1)

ax0.set_thetamin(-2)
ax0.set_thetamax(10)

ax1.set_thetamin(178)
ax1.set_thetamax(190)

for ax in [ax0, ax1]:

    # Labels
    ax.set_xlabel("r")
    ax.set_ylabel(r"$\theta$", labelpad=10)

    # R range
    ax.set_rorigin(0)
    ax.set_rmin(9)
    ax.set_rmax(13)

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果如下图:

极坐标图 你可以清楚地看到

(a) 径向轴上的刻度标签位置在图之间从下到上切换,并且 theta 的刻度标签从右到左切换。

(b) 轴标签位置是固定的。我希望轴标签也随着刻度标签移动。即在左图中,“theta”应位于右侧,而在右图中,“r”应位于顶部。

如何以某种方式控制轴/刻度标签,以便它们正确定位?对于例如 90 度的偏移,情况甚至会变得更糟,因为此时 theta …

python matplotlib

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

在Python中捕获异常的详细信息

我在 macOS 10.15 Catalina 上运行 Python 3.7,自从升级以来,当我的代码运行时,我遇到了一些以前从未发生过的有问题的异常:

libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: Couldn't close file
Run Code Online (Sandbox Code Playgroud)

我不太明白为什么突然出现问题(以及原因是什么),但我想在代码中找到抛出此异常的确切行。我怎样才能获得例如发生此异常的代码中的行号?

python macos-catalina

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

Python:拟合误差函数(erf)或类似数据

我需要将特殊的数据分布与任何可用的函数相匹配。该分布并不真正遵循特定的理论预测,因此我只想拟合任何给定的函数,但没有太大意义。我附上了一张带有样本分布和五阶多项式拟合的图像,以表明这种简单的方法实际上并不起作用。

我知道分布非常类似于错误函数,但我没有设法用 scipy 来拟合这样的函数......

我希望任何人都有一种方法可以将误差函数拟合到这样的分布中,或者可以建议我可以适合描述这种分布的不同类型的函数。

样本数据

python scipy

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

更新类的实例属性

我一直在谷歌搜索这个主题,我没有找到一个普遍接受的方法来实现我的目标.

假设我们有以下课程:

import numpy as np
class MyClass:

    def __init__(self, x):
        self.x = x
        self.length = x.size

    def append(self, data):
        self.x = np.append(self.x, data)
Run Code Online (Sandbox Code Playgroud)

并且x应该是一个numpy阵列!如果我跑

A = MyClass(x=np.arange(10))
print(A.x)
print(A.length)
Run Code Online (Sandbox Code Playgroud)

我明白了

[0 1 2 3 4 5 6 7 8 9]10.到现在为止还挺好.但是如果我使用append方法

A.append(np.arange(5))
Run Code Online (Sandbox Code Playgroud)

我得到的[0 1 2 3 4 5 6 7 8 9 0 1 2 3 4]10.这也是预期的,因为实例属性length是在实例化期间设置的A.现在我不确定更新实例属性的最pythonic方法是什么.例如,我可以__init__再次运行:

A.__init__(A.x)
Run Code Online (Sandbox Code Playgroud)

然后该length属性将具有正确的值,但在这里的一些其他帖子中我发现这是不知何故不赞成的.另一个解决方案是直接更新方法中的length属性append,但我有点想避免这种情况,因为我不想忘记在某个时候更新属性.有更多pythonic方法更新 …

python

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

将每个立方体的平面除以其中位数而没有环

我需要规范化一个numpy数据立方体说:

cube = np.random.random(100000).reshape(10,100,100)
Run Code Online (Sandbox Code Playgroud)

然后用中位数对10个结果平面中的每一个进行归一化.所以,例如对于第一架飞机

cube[0, :, :] /= np.median(cube[0, :, :])
Run Code Online (Sandbox Code Playgroud)

我只想避免循环,如果可能的话谢谢

python numpy

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

Numpy开关从列编号到行

我需要改变矩阵的编号方案.说,

import numpy as np
a = np.arange(6).reshape(3,2)
array([[0, 1],
       [2, 3],
       [4, 5]])
Run Code Online (Sandbox Code Playgroud)

我想把它切换到

b = np.array([[0,3],[1,4],[2,5]])
array([[0, 3],
       [1, 4],
       [2, 5]])
Run Code Online (Sandbox Code Playgroud)

所以基本上我首先通过行对矩阵进行编号.我相信在numpy中有一个很好的方法可以做到这一点

python numpy

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