我有一些简单的代码,我只想计算两个矩阵的乘积中不同列的数量。代码是
import numpy as np
import itertools
n = 5
h = 2
M = np.random.randint(2, size=(h,n))
F = np.matrix(list(itertools.product([0,1],repeat = 5))).transpose()
product = M*F
setofcols = set()
for column in product.T:
setofcols.add(column)
print len(setofcols)
然而,这给出了错误的答案,因为setofcols
的所有元素都是不同的,即使列是相同的。什么是正确的做法?
我将使用更大的n和h值来运行它,因此使用尽可能少的内存的解决方案将非常棒。
答案 0 :(得分:2)
您可以使用repr
:
import numpy as np
import itertools
n = 5
h = 2
M = np.random.randint(2, size=(h,n))
F = np.matrix(list(itertools.product([0,1],repeat = 5))).transpose()
product = M*F
setofcols = set()
for column in product.T:
setofcols.add(repr(column))
print len(setofcols)
print setofcols
你也可以这样做:
setofcols={tuple(e.A1) for e in product.T}
矩阵的A1属性是1d基本数组,可用作tuple
的序列。