numpy - 仅限于多重播放

时间:2018-02-08 08:37:36

标签: python arrays numpy

我在这里有一个很大的问题,我正在努力工作并尝试更好地理解它,但我在实现目标的过程中遇到了小问题。

这是我的代码。

product_test = []
product_test.append({
    'min-dkk' : 149.9,
    'min-procent' : 100.0,
    'max-dkk' : 249.9,
    'max-procent' : 0.0,
    'cost-price' : 400.0
})
product_test.append({
    'min-dkk' : 150.1,
    'min-procent' : 0.0,
    'max-dkk' : 0.0,
    'max-procent' : 10,
    'cost-price' : 1000.0
})

product_test.append({
    'min-dkk' : 25.0,
    'min-procent' : 5000.0,
    'max-dkk' : 100.0,
    'max-procent' : 0.0,
    'cost-price' : 10.0
})

# print(product_test)
list_product = None
for test in product_test:
    if list_product is None:
        list_product = np.array([[test['min-dkk'],test['min-procent'],test['max-dkk'],test['max-procent'],test['cost-price']]])
    else:
        product_price_data = np.array([[test['min-dkk'],test['min-procent'],test['max-dkk'],test['max-procent'],test['cost-price']]])
        list_product = np.vstack((list_product, product_price_data))

print('')
print(list_product)

list_product[:,0] += 0.0 if list_product[:,0] == 0 else list_product[:,4]
list_product[:,1] = 0.0 if (list_product[:,4] + ((list_product[:,4]/100) * list_product[:,1])) == list_product[:,4] else (list_product[:,4] + ((list_product[:,4]/100) * list_product[:,1]))
list_product[:,2] += 0.0 if list_product[:,2] == 0 else list_product[:,4]
list_product[:,3] = 0.0 if (list_product[:,4] + ((list_product[:,4]/100) * list_product[:,3])) == list_product[:,4] else (list_product[:,4] + ((list_product[:,4]/100) * list_product[:,3]))

如果我在我的numpy数组中只运行一行它工作正常,如果我运行此代码,我将得到错误

list_product[:,0] += 0.0 if list_product[:,0] == 0 else 

list_product[:,4]
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我的想法是,如果值大于0(零),我希望基于值进行多重播放字段,并且当我只在一个数组行上执行它时工作正常但是当我使用多行时我得到此错误,并且我试图阅读它并且我没有回复“真/假”我想要做我的数学,如果它从零差异因为价格规则可以在我们的动态范围内是积极的或否定的。

1 个答案:

答案 0 :(得分:1)

numpy中的等价物是:

list_product[:,0] += (list_product[:,0] != 0) * list_product[:,4]

现在将条件计算为boolean类型的数组,强制转换为list_product类型(1表示true,0表示false),然后乘以您可能要添加的数组。