我真的想避免这些恼人的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) 
谢谢 :)
我试图理解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) 关于print语句已经有很多其他问题,但我没有找到问题的答案:
当我做:
for idx in range(10):
    print(idx, end="\r")
Run Code Online (Sandbox Code Playgroud)
在(ipython)终端直接,它工作正常,并始终覆盖前一行.但是,在使用PyCharm的模块中运行时,我看不到stdout中打印的任何行.
这是一个已知的PyCharm问题吗?
我正在使用一个生成警告的函数,我真的不需要阅读。问题是我想并行运行该函数,并且在这样做时,似乎我无法再抑制警告。考虑这个例子:
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,因为它是从另一个包导入的。有什么办法可以不收到警告信息吗?
所以,我一直在浏览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]].
我怎么能得到所有独特的网格点?
好吧,这可能是一个非常愚蠢的问题,这可能是不可能的,或者我正在以一种扭曲的方式思考.所以,考虑一下:
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只是非常普通的东西而且没什么特别的.它有两个实例属性:x和y.
MyList另一方面,应该是一个定义迭代器的类,它应该只包含第一个类的元素MyClass!
然后我创建两个实例MyClass,将它们放在一个列表中foo,并使用此列表创建MyList(bar)的实例.
现在,传递给的列表MyList应该只包含MyClass元素!我想要的是Python要意识到这个事实!当我编写一个迭代内容的循环时bar,我希望Python知道中的元素bar是MyClass对象.
我的程序现在的一个主要不便是Python没有意识到这一点,并且自动完成功能不起作用.换句话说:在循环中,当我写i.,我想所有可能的参数弹出(在这种情况下,x和y).我可以在Python中定义一些魔术方法MyList,让Python知道这个列表的内容吗?
我一直在寻找一种方法来可靠地定位极坐标图中的刻度和轴标签。请看下面的例子:
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 …
我在 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)
我不太明白为什么突然出现问题(以及原因是什么),但我想在代码中找到抛出此异常的确切行。我怎样才能获得例如发生此异常的代码中的行号?
我需要将特殊的数据分布与任何可用的函数相匹配。该分布并不真正遵循特定的理论预测,因此我只想拟合任何给定的函数,但没有太大意义。我附上了一张带有样本分布和五阶多项式拟合的图像,以表明这种简单的方法实际上并不起作用。
我知道分布非常类似于错误函数,但我没有设法用 scipy 来拟合这样的函数......
我希望任何人都有一种方法可以将误差函数拟合到这样的分布中,或者可以建议我可以适合描述这种分布的不同类型的函数。
我一直在谷歌搜索这个主题,我没有找到一个普遍接受的方法来实现我的目标.
假设我们有以下课程:
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方法更新 …
我需要规范化一个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)
我只想避免循环,如果可能的话谢谢
我需要改变矩阵的编号方案.说,
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 ×12
numpy ×4
arrays ×1
joblib ×1
matplotlib ×1
pycharm ×1
scikit-learn ×1
scipy ×1
warnings ×1