小编Rak*_*lli的帖子

Octave/Matlab:确定非常大的矩阵中的唯一行

我在Octave中有一个13146 x 13146矩阵,我想确定它的唯一行.unique(M, "rows")由于Octave内部和/或内存限制而失败.

我查看了其他有关查找唯一行的帖子,但没有一个用大型矩阵解决了这个问题.

我现在的方法是"分而治之",例如通过

A(:,:,i)=M(r_i:s_i,:)
B(:,:,i)=unique(A(:,:,i), "rows")
Run Code Online (Sandbox Code Playgroud)

i子矩阵的指数,r_is_i子矩阵的开始和结束的行号.要将所有数据返回到一个大矩阵(并再次确定唯一行):

C(:,:,i)=B(:,:,i)'
D=reshape(C,l,n*m)
E=D'
F=unique(E, "rows")
Run Code Online (Sandbox Code Playgroud)

使用n子矩阵的数量,子矩阵中m的原始行l数和列数.

有没有更好的方法来达到预期的效果?

matlab octave

5
推荐指数
2
解决办法
968
查看次数

沿NumPy数组的轴计算唯一元素

我有一个三维数组

A=np.array([[[1,1],
[1,0]],

[[1,2],
[1,0]],

[[1,0],
[0,0]]])

现在我想获得一个在给定位置具有非零值的数组,如果在该位置只出现唯一的非零值(或零).如果在该位置仅出现零或多于一个非零值,则它应该为零.对于上面的例子,我想

[[1,0],
[1,0]]

以来

  • A[:,0,0]那里只有1s
  • A[:,0,1]0,12,所以一个以上的非零值
  • A[:,1,0]01,所以1被保留
  • A[:,1,1]那里只有0s

我可以找到有多少非零元素np.count_nonzero(A, axis=0),但我想保留1s或2s,即使它们有几个.我看了一下,np.unique但它似乎不支持我想做的事情.

理想情况下,我喜欢一个函数np.count_unique(A, axis=0),它会以原始形状返回一个数组,例如[[1, 3],[2, 1]],所以我可以检查是否发生了3个或更多,然后忽略该位置.


所有我能想到的是一个列表理解迭代我想要获得的

[[len(np.unique(A[:, i, j])) for j in range(A.shape[2])] for i in range(A.shape[1])]

还有其他想法吗?

python arrays numpy

5
推荐指数
1
解决办法
1425
查看次数

标签 统计

arrays ×1

matlab ×1

numpy ×1

octave ×1

python ×1