• 2020-11-24 09:16:56

如下所示：

# -*- coding: utf-8 -*-

# @Time : 2018/5/17 15:05

# @Author : Sizer

# @Site :

# @File : test.py

# @Software: PyCharm

import time

import numpy as np

# data = np.array([

# [5.0, 3.0, 4.0, 4.0, 0.0],

# [3.0, 1.0, 2.0, 3.0, 3.0],

# [4.0, 3.0, 4.0, 3.0, 5.0],

# [3.0, 3.0, 1.0, 5.0, 4.0],

# [1.0, 5.0, 5.0, 2.0, 1.0]

# ])

data = np.random.random((1000, 1000))

print(data.shape)

start_time = time.time()

# avg = [float(np.mean(data[i, :])) for i in range(data.shape[0])]

# print(avg)

start_time = time.time()

avg = []

for i in range(data.shape[0]):

sum = 0

cnt = 0

for rx in data[i, :]:

if rx > 0:

sum += rx

cnt += 1

if cnt > 0:

avg.append(sum/cnt)

else:

avg.append(0)

end_time = time.time()

print("op 1:", end_time - start_time)

start_time = time.time()

avg = []

isexist = (data > 0) * 1

for i in range(data.shape[0]):

sum = np.dot(data[i, :], isexist[i, :])

cnt = np.sum(isexist[i, :])

if cnt > 0:

avg.append(sum / cnt)

else:

avg.append(0)

end_time = time.time()

print("op 2:", end_time - start_time)

#

# print(avg)

factor = np.mat(np.ones(data.shape[1])).T

# print("facotr :")

# print(factor)

exist = np.mat((data > 0) * 1.0)

# print("exist :")

# print(exist)

# print("res :")

res = np.array(exist * factor)

end_time = time.time()

print("op 3:", end_time-start_time)

start_time = time.time()

exist = (data > 0) * 1.0

factor = np.ones(data.shape[1])

res = np.dot(exist, factor)

end_time = time.time()

print("op 4:", end_time - start_time)

经过多次验证, 第四种实现方式的事件效率最高！

以上这篇python 判断矩阵中每行非零个数的方法就是小编分享给大家的全部内容了，希望能给大家一个参考，也希望大家多多支持脚本之家。

更多相关内容
• I have a NxM matrix for example named A. After some processes I want to count the zero elements.How can I do this in one ... I tried A==0 which returns a 2D matrix.解决方案There is a function to fi...

I have a NxM matrix for example named A. After some processes I want to count the zero elements.

How can I do this in one line code? I tried A==0 which returns a 2D matrix.

解决方案

There is a function to find the number of nonzero matrix elements nnz. You can use this function on a logical matrix, which will return the number of true.

In this case, we apply nnz on the matrix A==0, hence the elements of the logical matrix are true, if the original element was 0, false for any other element than 0.

A = [1, 3, 1;

0, 0, 2;

0, 2, 1];

nnz(A==0) %// returns 3, i.e. the number of zeros of A (the amount of true in A==0)

The credits for the benchmarking belong to Divarkar.

Benchmarking

Using the following paramters and inputs, one can benchmark the solutions presented here with timeit.

Input sizes

Small sized datasize - 1:10:100

Medium sized datasize - 50:50:1000

Large sized datasize - 500:500:4000

Varying % of zeros

~10% of zeros case - A = round(rand(N)*5);

~50% of zeros case - A = rand(N);A(A<=0.5)=0;

~90% of zeros case - A = rand(N);A(A<=0.9)=0;

The results are shown next -

1) Small Datasizes

2. Medium Datasizes

3. Large Datasizes

Observations

If you look closely into the NNZ and SUM performance plots for medium and large datasizes, you would notice that their performances get closer to each other for 10% and 90% zeros cases. For 50% zeros case, the performance gap between SUM and NNZ methods is comparatively wider.

As a general observation across all datasizes and all three fraction cases of zeros,

SUM method seems to be the undisputed winner. Again, an interesting thing was observed here that the general case solution sum(A(:)==0) seems to be better in performance than sum(~A(:)).

展开全文
• ## 4 判断矩阵

千次阅读 2020-12-28 20:11:10
4 判断矩阵层次模型正确后，可以切换到判断矩阵输入页面，如图：4.1 层次结构树4.1.1 层次结构树上的要素窗口左下方的层次结构树列出了模型中的所有要素，需要输入判断矩阵的要素为蓝色文字，备选方案和重复的要素不...

4 判断矩阵

层次模型正确后，可以切换到判断矩阵输入页面，如图：

4.1 层次结构树

4.1.1 层次结构树上的要素

窗口左下方的层次结构树列出了模型中的所有要素，需要输入判断矩阵的要素为蓝色文字，备选方案和重复的要素不需要进行判断矩阵的输入，分别为红色和灰色文字。

初始状态层次结构树只将需要输入判断矩阵的要素展开，鼠标左键点击一个需要输入判断矩阵的节点窗口右边输入区会显示它对应的判断矩阵。

4.1.2 层次结构树要素节点图标

判断矩阵结构树：

4.2 判断矩阵值的输入

在表格中选择某个比较项，然后拖动窗口右上的刻度条即可改变其比较值。在输入过程中可以任意切换输入形式。

在这种输入形式下，还可以向判断矩阵中直接填入数值。双击表格中的某项，或在选中某项的状态下按下回车键，此项将进入编辑状态。在编辑状态下，可以输入小数/分数形式的值作为此项的值。输入完成按下回车键或鼠标点击其他项确认输入，或按下ESC取消这次编辑。

在表格中选中直接输入的自定义值的项时，在拖动刻度条左侧会显示一个黑色的叹号，表示此项为自定义值。

4.3 判断矩阵一致性比例实时显示

在输入判断矩阵数据时，如果判断矩阵数据已完全输入，判断矩阵的一致性比例会实时地显示在输入窗口的上部。

4.4 判断矩阵一致性最大影响元素实时显示

判断矩阵输入时会高亮显示对一致性影响最大的元素，只有填写完整并且一

致性比例大于0.1的判断矩阵才会显示。

4.5 判断矩阵一致性检查

当点击”计算结果”页面，会自动进行判断矩阵的一致性检查，如果矩阵有残缺或矩阵不一致，将会在输出窗口中显示这些错误。

鼠标左键双击错误列表中的错误项将会定位到发生错误的判断矩阵。

4.6 判断矩阵一致性自动调整

鼠标左键双击判断矩阵不一致错误，定位到发生错误的判断矩阵，点击工具栏上的“标记修正”按钮进行所有的矩阵不一致修正，也可以在层次结构树上对应的节点单击右键弹出菜单选择”自动调整一致性”。标志为自动调整一致性的要素在层次结构树上的图标变为

在已经标志为自动调整一致性的节点上单击右键弹出菜单上再次选择”自动调整一致性”，可以取消自动调整一致性。

4.7 残缺判断矩阵自动补全

鼠标左键双击判断矩阵不完整错误将会弹出提示框询问是否自动插入缺失的值，也可以在层次结构树上对应的节点单击右键弹出菜单选择”自动补全残缺矩阵”。

在已经标志为自动补全残缺矩阵的节点上单击右键弹出菜单上再次选择” 自动补全残缺矩阵”，可以取消自动补全残缺矩阵。

4.8 判断矩阵一致性自动调整和残缺判断矩阵自动补全的参数设置

yaahp提供两种不一致判断矩阵调整算法，最大改进方向和最小改变。

最大改进方向算法：适合不一致性比例较大的不一致矩阵的调整。一致性比例如果较大，很大的可能是判断时某个或几个数据判断错误，所以此算法尽量修改判断矩阵中对一致性影响最大的项。

最小改变算法：适合不一致性比例较小的不一致矩阵的调整，这种情况大多是因为专家给出的两两比较数据中微小误差的累计。这种情况使用最大改进方向算法修正会发生错误，所以这种算法的目标是: 在使判断矩阵的一致性比例达到要求的基础上最小化对判断矩阵的修改。

可以设定yaahp自动使用合适的算法(推荐)，或者指定对任何不一致判断矩阵只使用两者之一。如果设定为为yaahp自动使用合适的算法，还可以设定算法选择的一致性比例阈值(缺省0.2)，不一致判断矩阵一致性比例大于此阈值，选用最大改进方向算法，否则使用最小改变算法。

最大一致性比例：指定使用最小变化算法调整不一致判断矩阵时一致性比例要达到的目标。如果调整算法收敛，调整后的判断矩阵的一致性比例就是这个设定值或略小。所以一般设置为0.1即可，如果有要求调整后的一致性比例更小些，可以修改这个参数。

缺失项最大比例：表示一个残缺矩阵只有其中缺失项所占百分比小于此参数的值时才能使用自动补全功能。此参数上限50%，如果一个判断矩阵缺失太多的项，自动补全其实没有意义。

最小变化不一致判断矩阵算法以及残缺矩阵自动填充算法都基于微粒群算法。

首先点击右上角设置选项

在弹出的页面中，切换到“计算参数”选项

4.9 检查判断矩阵

检查判断矩阵的作用是对各个不一致的判断矩阵给出其数据评价和改进意见。在判断矩阵页面点选工具栏的“检查判断矩阵”功能，如果是非群决策将直接显示检查结果窗口;如果是群决策会显示如下图的窗口，根据具体需求选择检查方式。

检查判断矩阵计算完成后，将显示如下图所示的检查结果窗口。

不同类型的检查结果放在不同的选项卡中，左侧列表每一项对应一个判断矩阵。右侧上方文本描述当前选中的判断矩阵使用的修正算法及修正效果，并给出改进建议。右侧下方显示判断矩阵数据，其中淡蓝色背景的数据是经过修正的，括号中的数值是修正前的数据。

数据检查结果中将不一致判断矩阵分为下面的几类，各类都给出了进一步程度处理建议。

最小改变(一致)

这类判断矩阵经过最小改变修正后能够满足一致性要求，一般不需要对此判断矩阵数据做进一步处理。yaahp默认设置下能够对其进行自动修正。

最小改变(不一致)

通过最小改变一致性修正算法无法使此判断矩阵达到一致性要求。建议将计算参数恢复为默认设置后再次检查，恢复默认设置操作如下：按Esc键关闭当前窗口 => 点击窗口右上角”设定”按钮 => 选择”计算参数”页面，点击下方的”恢复默认设置”按钮。

最大改进方向(改变一个要素)

这类判断矩阵利用最大改进方向算法进行自动修正可以达到一致性要求，并且只需要修正判断矩阵中的一个数据项即可，一般不需要对此判断矩阵数据做进一步处理。yaahp默认设置下能够对其进行自动修正。

最大改进方向(改变多个要素)

这类数据利用最大改进方向算法进行自动修正可以达到一致性要求，但是需要修正的数据项大于1个，根据需要修正的数据所占百分比，确定进一步的处理对策。yaahp判断矩阵检查结果中这类判断矩阵具有不同颜色的图标，并根据需修正数据百分比给出相应的处理建议。

最大改进方向(修正失败)

这类数据无法利用最大改进方向算法进行自动修正使此判断矩阵达到一致性要求。建议重新填写或废弃此判断矩阵数据。

展开全文
• 举个例子，如果需要将A矩阵大于a的元素置零，那么在matlab中可以这么输入： 方法一：A(find(A>a))=0; 方法二：A(A>a)=0; 通过这个代码即可实现目标。 实例：将3*3的随机矩阵A中大于0.5的数置零。 向...

转载

举个例子，如果需要将A矩阵中大于a的元素置零，那么在matlab中可以这么输入：

方法一：A(find(A>a))=0;

方法二：A(A>a)=0;

通过这个代码即可实现目标。

实例：将3*3的随机矩阵A中大于0.5的数置零。

向左转|向右转

向左转|向右转

1、思路：

使用布尔数组引用矩阵中所有大于某值的元素，然后将其赋值为0。

2、代码：

A(A>10) = 0;  % 将矩阵A中大于10的元素设置为0。

3、示例：

向左转|向右转

比如要将矩阵A元素大于7的置为0，则可以这样：
B=find(A>7);%找出大于7的位置
A(B)=0; %将大于7的位置置为0

转载于:https://www.cnblogs.com/xiaoxuesheng993/p/9538977.html

展开全文
• 方法 1：尝试 Cholesky 分解检查矩阵是否为对称正定矩阵的最有效方法是简单地尝试对矩阵使用 chol。如果分解失败，则矩阵不是对称正定矩阵。此方法不要求矩阵为对称矩阵也能成功进行测试(如果矩阵不对称，则分解将会...
• 层次分析法中判断矩阵的填写方法、一致性检验的步骤、以及根据判断矩阵计算权重的方法
• 1:找到矩阵大于i 的位置，输入find(a>i)即可。注意，matlab是以列的方式读取，依次读取第一列、第二列...,所以下标第二个值是第一列第二个值4，而不是第一行第二个值2 如：获取矩阵a中大于3 的位置 >>...
• print("数组中所有元素都大于0") else: print("数据中有小于等于0的元素") ###The second form if all(i > 0 for i in a) > 0: print("数组中所有元素都大于0") else: print("数据中有小于等于0的元素") ...
• 原理解释： 1.Z<0:表示将Z中的各个元素与0相比较，若元素小于0则返回1，否则若元素大于0则返回0。 代码实现： 结果显示： 2.sum(Z<0):表示将Z<0这一个判断矩阵按列求和。 代码实现：这里为了表示和说明方便将sum(Z...
• 有很多方法可以实现这一点，比如扁平化和过滤，或者简单地枚举，但是我认为使用Boolean/mask array是最简单的方法(iirc是一个更快的方法)：>>> y = np.array([[123,24123,32432], [234,24,23]])array([[ ...
• 纯粹只为矩阵求秩的话，也可以通过列变换把右边两列变为0。系数矩阵矩阵中的众多类型之一，简单来说系数矩阵就是将方程组的系数组成矩阵来计算方程的解。系数矩阵常常用来表示一些项目的数学关系，比如通过此类...
• 判断一个ndarray中所有元素是否大于或小于某个具体值？ import numpy as np a = [4, 5, 6, 8] np.array(a) < 10 #输出为 array([True, True, True, True]) (np.array(a) < 10).all() #输出为 True
• a=randi(5,5) a(a>3)
• 质数（Prime number），又称素数，指在大于1的自然数中，除了1和该数自身外，无法被其他...在循环体里面，每次循环当然就是要判断当次除法是否是整除，这里可以使用求模运算，也就是取余，当余数为0时，该数就不是
• 今天小编就为大家分享一篇python找出列表中大于某个阈值的数据段示例，具有很好的参考价值，希望对大家有所帮助。一起跟随小编过来看看吧
• 1.any 函数 判断一个矩阵里是否有非...　判断一个矩阵里是否全为非零元素，如果是，返回1，如果不是，返回0判断矩阵中的值是否都大于某个值n： all(A(:)>n) 3.isequal函数 tf = isequal(A, B, ...)。 　...
• ## 判断上三角矩阵

千次阅读 2021-03-24 16:46:03
上三角矩阵指主对角线以下的元素都为0矩阵；主对角线为从矩阵的左上角至右下角的连线。 本题要求编写程序，判断一个给定的方阵是否上三角矩阵。 输入格式： 输入第一行给出一个正整数T，为待测矩阵的个数。接下来...
• 奇异矩阵判断方法：首先，看这个矩阵是不是方阵（即行数和列数相等的矩阵。若行数和列数不相等，那就谈不上奇异矩阵和非奇异矩阵）。 然后，再看此方阵的行列式|A|是否等于0，若等于0，称矩阵A为奇异矩阵；若不...
• 奇异值：奇异值分解法是线性代数中一种重要的矩阵分解法，在信号处理、统计学等领域有重要应用。定义：设A为m*n阶矩阵，A'表示A的转置矩阵，A'*A的n个特征值的非负...奇异矩阵判断方法：首先，看这个矩阵是不是方...
• 请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。有则返回1，无则返回0，输入错误返回input error 问题分析：根据杨氏矩阵的规律可知，左上角是最小元素，右下角是最大元素，进行比较...
• ## 矩阵正定性判定

万次阅读 多人点赞 2021-03-23 08:19:38
如何判定矩阵是否正定
• 设集合 S={λi:λi≥0,i∈N+}S = \{ \lambda_i : \lambda_i \ge 0, i \in \mathbb N ^+ \} 记 Λ(k,n)=⎛⎝⎜⎜⎜⎜⎜⎜⎜λ1⋱λk⎞⎠⎟⎟⎟⎟⎟⎟⎟n×n,k,n∈N+,k≤n\Lambda (k, n) = \begin{pmatrix} \lambda_{...
• 判断一个矩阵是否为正定矩阵有两种方法：求出A的所有特征值。若A的特征值均为正数，则A是正定的；若A的特征值均为负数，则A为负定的；计算A的各阶主子式。若A的各阶主子式均大于零，则A是正定的；若A的各阶主子式中...
• 即：对于任意的 n∈N+,n \in \mathbb N ^+, 对于任意一个实对称矩阵 An×n,A_{n \times n}, 若它的的任意一个主子式 ≥0,\ge 0, 则 X⊺AX≥0,∀X∈RnX ^ \intercal A X \ge 0, \forall X \in \mathbb R ^n 。...
• R语言，矩阵矩阵元素判断矩阵元素chong新赋值，if，ifelse，switch，matrix
• [0, 0, 0, 1, 0], [0, 3, 1, 3, 0]]) # 方式二 >>> ( a + abs ( a )) / 2 array([[0, 0, 0, 2, 1], [0, 0, 0, 3, 3], [0, 0, 3, 0, 3], [0, 0, 0, 1, 0], [0, 3, 1, 3, 0]]) # ...
• python中numpy包的array矩阵判断某个元素的个数 import numpy as np a=np.array([[ 2, 7, 4, 2], [35, 9, 1, 5], [22, 12, 3, 2]]) print(np.sum(a==2)) ## 2的个数 输出为 3
• ## python条件判断语句

千次阅读 2021-01-13 07:48:08
大家可以自己搜索了解一下 运算符的优先级 条件判断语句 废话不多说，我们来实践一下 还是打开我们的pycharm，右击demo1新建一个Python文件 起个名字叫demo3 注意： 1.Python中if或者else后面一定要跟：冒号（英文的...
• 更新：我做了一些测试,Jonas的解决方案对于一系列不同大小的输入向量来说是最快的.特别是,正如angainor指出的那样,解决方案可以很好地扩展到大尺寸 – 这是一个...我的问题：我有这个列向量：Vec = [0; 1; 2; -1; ...
• 先上数据，我想做的就是对矩阵里面的数据进行判断，如果第i个数据的值小于0.1的话，就把它取为0，如果大于0.1 就保留该值： for j=1：705333 if abs(b(j)) b(j)=0 else b(j)=b(j); end end 但是因为数据...

...