【发布时间】:2018-04-16 12:29:04
【问题描述】:
对于这个矩阵 K=
[[-1. 1. 0.]
[ 0. 0. 0.]
[ 0. -1. 1.]
[ 0. 0. 0.]
[ 0. -1. 1.]
[ 0. 0. 0.]]
任务是将非零唯一行的索引存储在数组中(这里的答案是 {0,2}),这样
K([0,2],:)
可用于线性代数运算。 我的尝试是:
myList = []
for i in range(len(K)): #generate pairs
for j in range(i+1,len(K)): #travel down each other rows
if np.array_equal(K[i],K[j]) and np.any(K[i] != 0, axis=1) and np.any(K[j] != 0, axis=1):
myList.append(K[i])
print ('indices of similar-non-zeros rows are\n',(i, j)),
elif not np.array_equal(K[i],K[j]) and np.any(K[i] != 0,axis=1) and np.any(K[j] != 0, axis=1):
myList.append(K[i])
print ('indices of non-similar-non-zeros rows are\n',(i, j)),
else:
continue
new_K = np.asmatrix(np.asarray(myList))
new_new_K = np.unique(new_K,axis=0)
print('Now K is \n',new_new_K)
答案是:
new_new_K = [[-1. 1. 0.]
[ 0. -1. 1.]]
问题1:如何以pythonic方式进行。以上是矩阵存储限制的替代解决方案,但将索引存储在数组中更为可取。
【问题讨论】:
-
您寻求更好解决方案的主要动机是什么?性能或可读性(或两者兼而有之)?
-
感谢您的回复@jpp,可读性和性能都很重要,因为我必须对一个非常大的矩阵 K 使用相同的想法,该矩阵在优化迭代后会更新。
-
另外,如果可能的话,很高兴看到一些基准测试。
-
发布的解决方案是否对您有用?
-
@Divakar 谢谢。这两种解决方案都适用于这种小矩阵情况,但我仍在努力寻找性能更优越的解决方案。
标签: python arrays python-3.x numpy matrix