小编seg*_*sai的帖子

比较NumPy数组,使NaNs相等

是否有一种惯用的方法来比较两个NumPy数组,这些数组会将NaN视为彼此相等(但不等于NaN以外的任何其他数据).

例如,我希望以下两个数组比较相等:

np.array([1.0, np.NAN, 2.0])
np.array([1.0, np.NAN, 2.0])
Run Code Online (Sandbox Code Playgroud)

和以下两个数组进行比较不相等:

np.array([1.0, np.NAN, 2.0])
np.array([1.0, 0.0, 2.0])
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种可以产生标量布尔结果的方法.

以下是这样做的:

np.all((a == b) | (np.isnan(a) & np.isnan(b)))
Run Code Online (Sandbox Code Playgroud)

但它很笨重,并创建所有这些中间阵列.

有没有一种方法更容易在眼睛上更好地利用记忆?

PS如果有帮助,已知阵列具有相同的形状和dtype.

python comparison numpy nan

21
推荐指数
3
解决办法
3105
查看次数

Matplotlib:在3d情节中显示

在下面的图中,取自matplotlib的图库,contourf用于在3d图形下方创建第二个图.我的问题是,是否有可能使用imshow做同样的事情?我希望2D图中的颜色更平滑.

制作2d图似乎是可能的,因为contourf接受zdir参数,而我看了,而imshow没有.这表明这是不可能的,但为什么不呢?pcolor也可以完成工作,有可能吗?

python 3d plot matplotlib

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

将matplotlib数据单元转换为标准化单位

有谁知道如何将matplotlib数据单元转换为规范化单位?

我需要它的原因是我需要在另一个图上创建一个子图.和默认语法:

plt.axes([0.1,0.1,0.3,0.3])
Run Code Online (Sandbox Code Playgroud)

需要规范化坐标,但我想使用数据坐标:

例如这段代码:

  plt.plot([0,2],[2,4]);
  plt.axes([0.3,.3,0.4,.4])
Run Code Online (Sandbox Code Playgroud)

产生这个:

在此输入图像描述 但我希望能够使用它的数据坐标来定义子图的位置,如[0.7,2.5,1.7,3.5].我试图摆弄axes.transData,axes.get_transform()等但是没有成功找到合适的函数来完成这项工作

python plot matplotlib

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

Numpy数组:有效地找到匹配的索引

我有两个列表,其中一个是大量的(数百万个元素),另外几个.我想做以下事情

bigArray=[0,1,0,2,3,2,,.....]

smallArray=[0,1,2,3,4]

for i in len(smallArray):
  pts=np.where(bigArray==smallArray[i])
  #Do stuff with pts...
Run Code Online (Sandbox Code Playgroud)

以上工作,但很慢.有没有办法更有效地做到这一点,而不诉诸于在C中写一些东西?

python numpy scipy

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

加速随机矩阵计算

我正在创建随机Toeplitz矩阵来估计它们可逆的概率.我目前的代码是

import random
from scipy.linalg import toeplitz
import numpy as np
for n in xrange(1,25):
    rankzero = 0
    for repeats in xrange(50000):
        column = [random.choice([0,1]) for x in xrange(n)]
        row = [column[0]]+[random.choice([0,1]) for x in xrange(n-1)]
        matrix = toeplitz(column, row)
        if  (np.linalg.matrix_rank(matrix) < n):
            rankzero += 1
    print n, (rankzero*1.0)/50000
Run Code Online (Sandbox Code Playgroud)

这可以加快吗?

我想增加值50000以获得更高的准确度,但目前这样做太慢了.

仅使用for n in xrange(10,14)节目进行性能分析

  400000    9.482    0.000    9.482    0.000 {numpy.linalg.lapack_lite.dgesdd}
  4400000    7.591    0.000   11.089    0.000 random.py:272(choice)
   200000    6.836    0.000   10.903    0.000 index_tricks.py:144(__getitem__)
        1    5.473    5.473   62.668 …
Run Code Online (Sandbox Code Playgroud)

python math performance numpy scipy

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

减少python中的循环

我想使用inntermost for循环(迭代3次的循环)来实现以下代码段,因为这会占用大量时间.

for i in arange(r):
    for j in arange(c):    
        for k in arange(3):
            if m[i,j]==n[i,j,k]:
                 new[i,j]=old[i,j,k]
Run Code Online (Sandbox Code Playgroud)

有谁能建议更好的方法?

python arrays loops numpy

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

标签 统计

python ×6

numpy ×4

matplotlib ×2

plot ×2

scipy ×2

3d ×1

arrays ×1

comparison ×1

loops ×1

math ×1

nan ×1

performance ×1