我是一名蟒蛇初学者。我有一条错误消息" ValueError:操作数无法与形状一起广播"。
这是我的数据:
import numpy as np
spent = np.array([
10, 10, 13, 12, 109, 17, 31, 1, 39, 41, 45,
41, 71, 161, 39, 115, 5, 51, 58, 334, 165, 1032,
40, 52, 21, 68, 79, 482, 10, 265, 60, 67, 12,
53, 188, 32, 397, 51, 17, 156, 100, 85, 53, 95,
68, 308, 53, 675, 78, 27, 219, 45, 45, 30, 61,
16, 72, 80, 96, 1386, 370, 16, 81, 28, 43, 90,
33, 66, 77])
visit = np.array([
19, 13, 16, 16, 18, 9, 12, 3, 15, 16, 16, 3, 4, 11, 11, 11, 11,
12, 12, 12, 13, 13, 14, 14, 15, 15, 5, 6, 6, 7, 7, 7, 7, 7,
17, 17, 8, 8, 8, 4, 4, 13, 8, 4, 4, 9, 20, 10, 11, 11, 14,
12, 12, 15, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 16, 16, 18, 11,
6])
我的工作是选择花费> 100并且一起访问> 10。所以,我想找到那些访问超过10次的人支付超过100美元的人。 我试过以下代码。
a=spent[spent>100] & [visit>10]
print(a)
但是,我有一条错误消息" ValueError:操作数无法与形状"一起广播。你能告诉我怎么处理这件事吗?我不知道。
答案 0 :(得分:3)
IIUC你不需要spent
本身的面具就像你做的那样:
In[16]:
a=(spent>100) & (visit>10)
a
Out[16]:
array([False, False, False, False, True, False, False, False, False,
False, False, False, False, True, False, True, False, False,
False, True, True, True, False, False, False, False, False,
False, False, False, False, False, False, False, True, False,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, True, False, False, False,
False, False, False, False, False, True, True, False, False,
False, False, False, False, False, False], dtype=bool)
这为你提供了一个只有True
的布尔掩码,在这两个数组中都满足这两个条件,你可以使用它来掩盖原始数组
因此对spent
:
In[18]:
spent[a]
Out[18]: array([ 109, 161, 115, 334, 165, 1032, 188, 219, 1386, 370])
您的错误是您屏蔽了原始数组,该数组生成的数组与您尝试针对visit
广播的形状不同:
print(spent[spent>100].shape)
print((visit>10).shape)
(16,)
(69,)
您可以将条件复合到同一个掩码中:
In[20]:
spent[(spent > 100) & (visit > 10)]
Out[20]: array([ 109, 161, 115, 334, 165, 1032, 188, 219, 1386, 370])
产生相同的结果
答案 1 :(得分:0)
可能的解决方案是使用列表推导:
[(x, y) for x, y in zip(visit, spent) if x > 10 and y > 100]
你也可以按如下方式使用numpy:
spent[visit > 10] > 100