我有numpy
矩阵0
和1
,我必须根据列进行不同的操作。
如果该列包含所有0
,我必须将这些0
替换为1/number_of_the_colomns
(我使用命令matrix.shape[1]
),否则(如果colomn不包含所有0
1
)我必须将每个元素除以colomn的总和。
实质上,在这些操作之后,每个colomn的总和必须是index returns 3-dim structure
。
我试试这个,但我在第三行有错误:a=numpy.nonzero(out_degree)
b=numpy.where(out_degree==0)
graph[:,b]=1/graph.shape[0]
graph[:,a]=graph/out_degree
graph
numpy matrix
是out_degree
,vector
是sum
,其中包含每个colomn的numpy
我必须使用-i [FISRST_FILE_PATH] -i [SECOND_FILE_PATH] -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 [OUTPUT_FILE_PATH]
无循环来节省时间。
答案 0 :(得分:0)
一个开始是:
import numpy as np
np.random.seed(1)
M, N = 5, 4
a = np.random.choice([0, 1, 2], size=(M, N), p=[0.6, 0.2, 0.2]).astype(float)
print(a)
a_inds = np.where(~a.any(axis=0))[0]
b_inds = np.setdiff1d(np.arange(N), a_inds, assume_unique=True)
b_col_sums = np.sum(a[:, b_inds], axis=0)
a[:, a_inds] = 1 / N
a[:, b_inds] /= b_col_sums
print(a)
输出:
[[ 0. 1. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 1.]
[ 0. 2. 0. 1.]
[ 0. 0. 0. 0.]]
[[ 0.25 0.33333333 0.25 0. ]
[ 0.25 0. 0.25 0. ]
[ 0.25 0. 0.25 0.5 ]
[ 0.25 0.66666667 0.25 0.5 ]
[ 0.25 0. 0.25 0. ]]
这应该易于阅读和中等性能。由于很多花哨的索引,它可能不是最快的。
它也不会检查除以零的问题(不属于您的规范)!
编辑: OP只对方阵感兴趣,因此以下内容将被忽略!
您声明:In essence, after these operations the sum of each colomn must be 1.
并提供操作:have to replace these 0 with 1/number_of_the_columns
,这是一个矛盾。也许您需要在a[:, a_inds] = 1 / N
中用M替换N.
然后你获得:
[[ 0.2 0.33333333 0.2 0. ]
[ 0.2 0. 0.2 0. ]
[ 0.2 0. 0.2 0.5 ]
[ 0.2 0.66666667 0.2 0.5 ]
[ 0.2 0. 0.2 0. ]]
答案 1 :(得分:0)
您可以检查非零元素,否则只需求它。
for col in range(a.shape[1]):
if np.any(a[:, col]):
a[:, col] /= np.sum(a[:, col])
else:
a[:, col] = 1/a.shape[1]