numpy矩阵中不同列的不同操作?

时间:2017-10-10 23:10:13

标签: python numpy matrix

我有numpy矩阵01,我必须根据列进行不同的操作。

如果该列包含所有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 matrixout_degreevectorsum,其中包含每个colomn的numpy

我必须使用-i [FISRST_FILE_PATH] -i [SECOND_FILE_PATH] -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 [OUTPUT_FILE_PATH] 无循环来节省时间。

2 个答案:

答案 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]