【发布时间】:2020-03-18 20:56:14
【问题描述】:
我有两个 numpy 数组,例如。 g.:
x = np.array([4, -1, 1, -1, -1, 2])
y = np.array([1, 2, 3, 4, 5, 6])
我想将x 中的所有-1 替换为y 中的数字,而不是x 中的数字。第一个-1,第一个数字在y,但不在x (3),第二个-1,第二个数字在y,不在x (5),.. . 所以最终的x 应该是:
[4 3 1 5 6 2]
我创建了这个函数:
import numpy as np
import time
start = time.time()
def fill(x, y):
x_i = 0
y_i = 0
while x_i < len(x) and y_i < len(y):
if x[x_i] != -1: # If current value in x is not -1.
x_i += 1
continue
if y[y_i] in x: # If current value in y is already in x.
y_i += 1
continue
x[x_i] = y[y_i] # Replace current -1 in x by current value in y.
for i in range(10000):
x = np.array([4, -1, 1, -1, -1, 2])
y = np.array([1, 2, 3, 4, 5, 6])
fill(x, y)
end = time.time()
print(end - start) # 0.296
它正在工作,但我需要多次运行此功能(例如百万次),所以我想优化它。有什么办法吗?
【问题讨论】:
-
你从
y得到的数字的顺序重要吗? -
这个数组
x = np.array([4, -1, 1, -1, -1, 2, -1, -1, -1])应该如何替换(假设y相同)? -
如果数字少于 -1 出现的次数会怎样?
-
y 中的数字总是足够的。其他情况无需解决。
-
@ashiswin 是的,顺序很重要。
标签: python arrays python-3.x numpy optimization