以下代码的第一个输入是一个像a=3
这样的单个值,第二个输入是一个由成对的值组成的数组,例如:B = [[1000, 1], [1000, 3], [999, 4]]
。如果每对的第一个值是偶数,那么我希望相应的输出值基于代码中所示的某些特定计算;如果第一个值是奇数,则有另一个计算,如代码所示。该对中的第二个值是我要为该对重复计算的次数。该示例中的计算应分别对1、2和3重复1、3和4次。
我不确定如何重复计算。
import numpy as np
a = np.array(input(), dtype=int)
B = []
for i in range(a):
b = np.array(input().split(), dtype=int)
B.append(b)
B = np.array(B)
C = []
for i in range(a):
if B[i, 0] % 2==0:
c = (B[i, 0] - 99) * 3
C.append(c)
else:
if B[i, 0] % 2 == 1:
d = (B[i, 0] - 15) * 2
C.append(d)
答案 0 :(得分:3)
忽略输入,假设您有一个数组
B = np.array([[1000, 1], [1000, 3], [999, 4]])
您可以使用遮罩执行选择性计算。最快的输入方式可能是使用np.where
:
C = np.where(B[:, 0] % 2, 2 * (B[:, 0] - 15), 3 * (B[:, 0] - 99))
这有点低效,因为它会为每个元素计算两个值。一种更有效但更丑陋的方法是就地执行所有操作:
b = B[:, 0]
mask = (b % 2 == 0)
C = np.empty_like(b)
np.subtract(b, 99, out=C, where=mask)
np.subtract(b, 15, out=C, where=~mask)
np.multiply(C, 3, out=C, where=mask)
np.multiply(C, 2, out=C, where=~mask)
Numpy然后提供repeat
函数以在计算输出值之后进行重复:
C = np.repeat(C, B[:, 1])
您可以将所有内容写成单行:
C = np.repeat(np.where(B[:, 0] % 2, 2 * (B[:, 0] - 15), 3 * (B[:, 0] - 99)), B[:, 1])
答案 1 :(得分:1)
嵌套for
循环的情况可能是这样。您有外部循环,然后循环进行一定次数的计算。因此,从您的示例中尝试以下方法:
for i in range(a):
for x in range(B[i][1]):
if B[i][0] % 2 == 0:
B[i][0]=(B[i][0]-99)*3
else:
B[i][0]=(B[i][0]-15)*2
C.append(B[i][0]
编辑:如果要重复相同的值,只需将其放回B
中,然后将B的该元素的值附加回C
一些其他注释,与您的问题并没有真正的联系,但是由于数字是偶数还是奇数,因此您if
中不需要第二个else
语句。如果确实需要显式检查其他条件,请使用Python的elif
语句,它是else if
的缩写,该语句仅在不满足先前条件的情况下才检查条件。