【发布时间】:2021-10-13 12:26:12
【问题描述】:
我正在尝试在同一迭代中过滤/循环并执行数学运算,但似乎无法找到正确的答案。我有一个 numpy 数组,大小为 6、2,包含两个我想一起减去的值,但是我希望在减去过程开始之前过滤这些值。
因此,如果该值大于另一列中的值,则应从高值中减去最小值,反之亦然。这也需要在一个循环中发生,该循环在执行过滤和数学运算时遍历数组。
这是我的代码示例:
#minus price
print('minus price trying appending')
minus_p_orgp1 = np.append(dif_p_times1, fp, axis=0)
print(minus_p_orgp1)
for ii, vv in enumerate(minus_p_orgp1):
print('greater')
greater_1 = np.all(ii > 0, axis=0)
greater_0 = np.all(ii <= 0, axis=0)
if greater_1 < greater_0:
iit = greater_0 - greater_1
if greater_1 > greater_0:
iit = greater_1 - greater_0
print(iit, ii, vv)
ssss = np.zeros(minus_p_orgp1.size - 1)
for i in range(len(minus_p_orgp1) - 1):
if minus_p_orgp1[i] < minus_p_orgp1[i]:
ssss[i] = minus_p_orgp1[i + 1] - minus_p_orgp1[i]
elif minus_p_orgp1[i + 1] > minus_p_orgp1[i]:
ssss[i] = minus_p_orgp1[i] - minus_p_orgp1[i + 1]
print(ssss)
这是数组的打印,上面的向量是 def_p_time1,下面的向量是 fp:
minus price trying appending
[[79340.33057205 78379.24102508 72188.80527274 76557.26239563
72857.90423589 71137.7943199 ]
[43528.22 43705. 43931.07 44571.24
44330.43 44465.64 ]]
我可以做些什么来实现我的目标?
我也尝试过让数组成为大小为 6、1 的两个独立向量来完成这个过程。但这似乎也很困难,让我知道你的想法。
我也试过这个;但是在运行代码时它只是打印出零:
trii = np.array([[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1]])
print(trii)
print(minus_p_orgp1[~(trii >= 1)])
print('it works')
itt = minus_p_orgp1[~(trii >= 1)]
itt1 = minus_p_orgp1[~(trii >= 0)]
sssss = np.zeros(dif_p_times1.size - 1)
ssss = np.zeros(minus_p_orgp1.size - 1)
for i in range(len(dif_p_times1) - 1):
for ii in range(len(fp) - 1):
if itt < itt1:
sssss[i] = itt[i] + itt1[i + 1]
ssss[i, ii] = fp[ii + 1] - dif_p_times1[i]
elif itt > itt1:
sssss[i] = itt[i + 1] + itt1[i]
ssss[i, ii] = dif_p_times1[i] - fp[ii + 1]
print(sssss)
[[0 0 0 0 0 0]
[1 1 1 1 1 1]]
[63455.70703442 68744.47486851 77804.44752373 79686.34612013
69322.78250338 83255.08459329]
it does something
[0. 0. 0. 0. 0.]
这是一个新的尝试,但它仍然不起作用:
ssss = np.zeros(minus_p_orgp1.size - 1)
x = minus_p_orgp1[::2]
y = minus_p_orgp1[::-2]
z = ssss[::2]
for z, x, y in range(len(minus_p_orgp1) - 1):
if x[i + 1] < y[i]:
z[i] = y[i + 1] - x[i]
elif x[i + 1] > y[i]:
z[i] = x[i + 1] - y[i]
print(z)
有没有办法遍历多维列表,这些列表具有不是从重塑/排列函数创建的真实值,并且仍然能够对单个单元格执行布尔过滤,从那里执行数学运算?
我看过 nditer 和 numba,但似乎都做了一个版本,他们转置 2d 数组的维度并减少值,而实际值只返回 1 个值,而不是数组。
【问题讨论】:
-
您的问题令人困惑。第一个代码块是否有效?您能否提供一组简单的输入,以便我们可以使用 copy-n-paste 运行它。显示结果。当我们有一个清晰的工作示例可供测试和修改时,就更容易提出改进建议。
-
你的变量为什么叫
ssss、sssss、ii、trii等等?这不会帮助您或其他任何人了解这里发生了什么。
标签: python arrays numpy loops multidimensional-array