我知道Python列表有一种方法可以返回第一个索引:
>>> l = [1, 2, 3]
>>> l.index(2)
1
Run Code Online (Sandbox Code Playgroud)
NumPy阵列有类似的东西吗?
考虑一下阵列 a
a = np.array([3, 3, np.nan, 3, 3, np.nan])
Run Code Online (Sandbox Code Playgroud)
我可以
np.isnan(a).argmax()
Run Code Online (Sandbox Code Playgroud)
但这需要找到所有np.nan只是为了找到第一个.
有更有效的方法吗?
我一直在试图弄清楚我是否可以传递一个参数,np.argpartition使np.nanget首先排序而不是last.
关于[dup]的编辑.
这个问题有几个不同的原因.
isnan.关于第二次[dup]的编辑.
解决平等和问题/答案仍然很老,很可能已经过时了.
我通过使用canny边缘检测来检测水波的边缘.但是,我想为这条边拟合一条曲线.这可能在OpenCV中吗?
代码是从OpenCV教程中的示例复制而来的:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('BW.JPG',0)
edges = cv2.Canny(img,100,200)
plt.plot(1),plt.imshow(edges,cmap = 'gray')
plt.title('WAVE')
plt.show()
Run Code Online (Sandbox Code Playgroud) 所以我本质上想使用 Pandas 数据帧在 Python 中实现 R 的 match() 函数的等价物 - 不使用 for 循环。
在 R match() 中,返回其第二个参数中第一个参数的(第一个)匹配位置的向量。
假设我有两个 df A 和 B,其中都包含 C 列。其中
A$C = c('a','b')
B$C = c('c','c','b','b','c','b','a','a')
Run Code Online (Sandbox Code Playgroud)
在 R 中,我们会得到
match(A$C,B$C) = c(7,3)
Run Code Online (Sandbox Code Playgroud)
什么是 Python 中 Pandas 数据框中列的等效方法,不需要循环遍历值。
我有一个numpy数组A.我希望以非A有效的方式返回非零之前的零数,因为它处于循环中.
如果A = np.array([0,1,2])然后np.nonzero(A)[0][0]返回1.但是如果A = np.array([0,0,0])这不起作用(在这种情况下我想要答案3).而且如果A非常大并且第一个非零值接近开头,这似乎效率低下.
我在 NumPy 中实现了自己的埃拉托斯特尼筛法。我相信你们都知道它是为了找到一个数字以下的所有素数,所以我不会进一步解释。
\n代码:
\nimport numpy as np\n\ndef primes_sieve(n):\n primes = np.ones(n+1, dtype=bool)\n primes[:2] = False\n primes[4::2] = False\n for i in range(3, int(n**0.5)+1, 2):\n if primes[i]:\n primes[i*i::i] = False\n\n return np.where(primes)[0]\nRun Code Online (Sandbox Code Playgroud)\n正如你所看到的,我已经做了一些优化,首先除了 2 之外所有素数都是奇数,所以我将 2 的所有倍数设置为False且仅是暴力奇数。
其次,我只循环遍历直到平方根下限的数字,因为平方根之后的所有合数都会因平方根以下素数的倍数而被消除。
\n但这不是最佳的,因为它循环遍历低于限制的所有奇数,并且并非所有奇数都是质数。随着数字的增大,素数变得更加稀疏,因此存在大量冗余迭代。
\n因此,如果候选列表是动态更改的,以这样的方式,已经识别的合数甚至不会被迭代,因此只有质数被循环,不会有任何浪费的迭代,因此算法将是最优的。
\n我写了一个优化版本的粗略实现:
\ndef primes_sieve_opt(n):\n primes = np.ones(n+1, dtype=bool)\n primes[:2] = False\n primes[4::2] = False\n limit = int(n**0.5)+1\n i = 2\n while i < limit:\n primes[i*i::i] = False\n i += 1 + …Run Code Online (Sandbox Code Playgroud) python ×6
numpy ×4
arrays ×1
indexing ×1
opencv ×1
pandas ×1
performance ×1
primes ×1
python-3.x ×1