我需要找到一个独特的行numpy.array.
例如:
>>> a # I have
array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0],
[1, 1, 1, 1, 1, 0]])
>>> new_a # I want to get to
array([[1, 1, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0],
[1, 1, 1, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)
我知道我可以在阵列上创建一个集合并循环,但我正在寻找一个有效的纯numpy解决方案.我相信有一种方法可以将数据类型设置为void然后我可以使用numpy.unique,但我无法弄清楚如何使其工作.
我正在使用2D形状阵列来存储经度+纬度对.有一次,我必须合并其中两个2D数组,然后删除任何重复的条目.我一直在寻找类似于numpy.unique的功能,但我没有运气.我一直在考虑的任何实现都看起来非常"未经优化".例如,我正在尝试将数组转换为元组列表,删除带有set的重复项,然后再次转换为数组:
coordskeys = np.array(list(set([tuple(x) for x in coordskeys])))
Run Code Online (Sandbox Code Playgroud)
有没有现成的解决方案,所以我不重新发明轮子?
为了说清楚,我正在寻找:
>>> a = np.array([[1, 1], [2, 3], [1, 1], [5, 4], [2, 3]])
>>> unique_rows(a)
array([[1, 1], [2, 3],[5, 4]])
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我想只使用一个元组列表,但是这些列表非常大,以至于它们消耗了我的4Gb RAM + 4Gb交换(numpy数组更节省内存).
我正在努力解决以下问题:我有一些非常大的矩阵(比如,至少,2000x2000,可能在将来它们甚至会达到10000x10000),排名非常小(2或3,称之为N),我需要找到一个有效的Python例程来从中提取线性独立行(或列,矩阵是对称的!).我试图采用QR分解的Q矩阵的前N列,但它似乎不能正常工作(这可能是错的吗?).你有更好的主意吗?
非常感谢你!
编辑 这是我用来实现Ami Tavory建议的方法的Python代码:
from numpy import absolute
from numpy.linalg import qr
q = qr(R)[1] #R is my matrix
q = absolute(q)
sums = sum(q,axis=1)
i = 0
while( i < dim ): #dim is the matrix dimension
if(sums[i] > 1.e-10):
print "%d is a good index!" % i
i += 1
Run Code Online (Sandbox Code Playgroud)
这应该告诉我行是否为非零,因此如果R的第i列是线性独立的.
我想计算分割大矩阵后遇到的等矩阵的数量.
mat1 = np.zeros((4, 8))
split4x4 = np.split(mat1, 4)
Run Code Online (Sandbox Code Playgroud)
现在我想知道split4x4中有多少相等的矩阵,但是collections.Counter(split4x4)会抛出错误.是否有内置的方式在numpy这样做?