是否有一种惯用的方法来比较两个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.
在下面的图中,取自matplotlib的图库,contourf用于在3d图形下方创建第二个图.我的问题是,是否有可能使用imshow做同样的事情?我希望2D图中的颜色更平滑.
制作2d图似乎是可能的,因为contourf接受zdir参数,而我看了,而imshow没有.这表明这是不可能的,但为什么不呢?pcolor也可以完成工作,有可能吗?

有谁知道如何将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()等但是没有成功找到合适的函数来完成这项工作
我有两个列表,其中一个是大量的(数百万个元素),另外几个.我想做以下事情
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中写一些东西?
我正在创建随机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) 我想使用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 ×6
numpy ×4
matplotlib ×2
plot ×2
scipy ×2
3d ×1
arrays ×1
comparison ×1
loops ×1
math ×1
nan ×1
performance ×1