np.array 与 python 列表的总和:% 不支持的操作数类型:'list' 和 'int'
sum on np.array vs python list: unsupported operand type(s) for %: 'list' and 'int'
我需要对集合中的指标函数求和。
sum()
可以直接用在 np.array 上没有问题。
import numpy as np
y = np.arange(10)
ans = sum(y % 2 == 0)
但是,sum()
不能直接用于 python 列表。
z = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ans = sum(z % 2 == 0)
另一方面,这适用于 np.array 和 python 列表。
ans = sum(each % 2 == 0 for each in z)
print(ans)
问题是为什么? np.array 和 python 列表都应该是可迭代的。是什么让 np.array 支持附加语法?
这是因为 Python 列表没有开箱即用,如果你愿意,你总是可以子类化 python 列表并拥有自己的自定义列表以允许通过 [=11 进行模运算=]方法:
class MyList(list):
def __mod__(self, i):
return [item%i for item in self]
>> data = MyList([1,2,3,4,5,6,7,8,9])
>> data%3
[1, 2, 0, 1, 2, 0, 1, 2, 0]
你可以看看官方Python documentation了解可以覆盖的方法
我需要对集合中的指标函数求和。
sum()
可以直接用在 np.array 上没有问题。
import numpy as np
y = np.arange(10)
ans = sum(y % 2 == 0)
但是,sum()
不能直接用于 python 列表。
z = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ans = sum(z % 2 == 0)
另一方面,这适用于 np.array 和 python 列表。
ans = sum(each % 2 == 0 for each in z)
print(ans)
问题是为什么? np.array 和 python 列表都应该是可迭代的。是什么让 np.array 支持附加语法?
这是因为 Python 列表没有开箱即用,如果你愿意,你总是可以子类化 python 列表并拥有自己的自定义列表以允许通过 [=11 进行模运算=]方法:
class MyList(list):
def __mod__(self, i):
return [item%i for item in self]
>> data = MyList([1,2,3,4,5,6,7,8,9])
>> data%3
[1, 2, 0, 1, 2, 0, 1, 2, 0]
你可以看看官方Python documentation了解可以覆盖的方法