首页 > 编程问答 >如何使用 NumPy 根据值在矩阵中的出现情况来组织值?

如何使用 NumPy 根据值在矩阵中的出现情况来组织值?

时间:2024-07-26 05:02:09浏览次数:14  
标签:python numpy

我正在做一个练习,需要根据 3x3 矩阵中的出现情况将 0 到 5 之间的值组织到一个数组中。我正在使用 NumPy 来完成此任务。

给定以下 3x3 矩阵:

[[1 1 3]
 [4 5 2]
 [3 0 0]]

我想输出一个数组,其中每个元素代表从 0 到 5 的每个值出现的次数。对于上述矩阵,所需的输出是:

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

我尝试过使用 np.array() 和 np.asarray(),并且我考虑过使用 flatten() 函数,但它并没有帮助我实现目标。这是我尝试过的:

import numpy as np

m = np.matrix([[1,1,3], [4,5,2], [3,0,0]]) # Primary matrix, used for obtaining the values
print("Original Matrix: ") # Print original matrix
print(m)

print("Occurrences: ")
for i in range(6):
  occur = (np.count_nonzero(m == i)) # Count the number of elements satisfying the condition
  print(i, ":", occur)

尽管如此,我的输出是:

Occurrences:
0 : 2
1 : 2
2 : 1
3 : 2
4 : 1
5 : 1

如何使用 NumPy 有效地将这些计数组织到所需的输出数组中?


可以使用 numpy.bincount 来实现这一点。 bincount 函数计算数组中每个值的出现次数,这正是想要的。

以下是如何使用它的方法:

import numpy as np

m = np.matrix([[1, 1, 3], 
               [4, 5, 2], 
               [3, 0, 0]])
occurrences = np.bincount(m.flatten(), minlength=6) 
print(occurrences)

这将打印:

[2 2 1 2 1 1] 

解释:

  1. m.flatten() :这会将的矩阵展平为一个包含所有值的单个数组: [1 1 3 4 5 2 3 0 0]
  2. np.bincount(m.flatten(), minlength=6) : 这将计算展平数组中每个值的出现次数。 minlength=6 参数确保即使某些数字(0 到 5)不存在于矩阵中,输出数组也包含 6 个元素。

此方法避免了显式循环,并且比使用 np.count_nonzero 进行迭代更有效,尤其是对于大型矩阵而言。

标签:python,numpy
From: 76410705

相关文章

  • 如何在 Python 中对多行使用单个 INSERT INTO 语句?
    我目前正在开发一个DiscordPython机器人,我在其中循环遍历ForumTags列表,并为每个对象生成INSERTINTOSQL语句以将数据插入MySQL数据库。但是,我想要通过将所有这些单独的INSERTINTO语句组合到单个查询中来优化我的代码,如下所示:INSERTINTO......
  • 仅将 sympy Matrix 的上三角值从 numpy.triu() 复制到数组中?
    我有一个方阵A(可以是任何大小),我想获取上三角部分并将这些值放入一个数组中,而没有中心对角线下方的值(k=0)。A=sympy.Matrix([[4,0,3],[2,4,-2],[-2,-3,7]])使用A_upper=numpy.triu(A)让我A_Upper=sympy.M......
  • 双 for 循环的 Pythonic 方式
    我有以下代码:importnumpyasnpepsilon=np.array([[0.,0.00172667,0.00071437,0.00091779,0.00154501],[0.00128983,0.,0.00028139,0.00215905,0.00094862],[0.00035811,0.00018714,0.,0.00029365,0.00036993......
  • 在 matplotlib 中绘制一个字符串函数 // 将 str 解释为 python 代码?
    我正在创建一个RPN计算器,尝试绘制用户给出的函数。例如,如果用户输入"xsin3*plot"我希望它绘制sin(x)*3其代码如下。注意:问题在ifprompt=="plot"userInputX=""#userInputXisalwaysreplacedbefore......
  • Python (Pebble) - 超时功能。当 TimeoutError 发生时,获取从 iterable 传递给函数的值
    我正在尝试在Pebble中设置工作超时(基本上有效)frompebbleimportProcessPoolfrommultiprocessingimportProcess,Pool,cpu_countimporttimedeftest_fn(randomNumberFromList):#print(f'Beginngingforthisnumber:{randomNumberFromList}')ifr......
  • 为什么在 Python 上使用正则表达式组功能会给出不同的输出
    importrestring1="aaabaa"zusuchen="aa"#1m_start=re.finditer(fr'(?=({zusuchen}))',string1)results=[(match.start(1),match.end(1)-1)formatchinm_start]forzinresults:print(z)print("Now#2:"......
  • 如何在python3中找到文件的长度?
    我的第一个.py:defcreate_file(file_name):list=["ab","cd","ef"]foriinlist:withopen(file_name,"a+")asinput_file:print("{}".format(i),file=input_file)我的第二个.py:fromfirstimport......
  • 哪种 python 日志记录风格是推荐的或标准的?
    我是Python新手。介于以下2个选项之间。对于python来说,推荐哪种风格或者更好?logging.info(f"Won'tsavemodelasscoreisbelow0,score:{score}")logging.info("Won'tsavemodelasscoreisbelow0,score%s",score)我个人更喜欢第二种方法。在Python......
  • python 协程 自定义互斥锁
    最近在用python的一款异步web框架sanic搭建web服务,遇到一个需要加特定锁的场景:同一用户并发处理订单时需要排队处理,但不同用户不需要排队。如果仅仅使用asyncwithasyncio.Lock()的话。会使所有请求都排队处理。1importasyncio2importdatetime34lock=asyncio.L......
  • Python 获取tiktok视频评论回复数据 api接口
    TIKTOKapi接口爬取tiktok视频评论回复数据详细采集页面如图https://www.tiktok.com/@dailymail/video/7329872821990182190?q=neural%20link&t=1706783508149请求APIhttp://api.xxxx.com/tt/video/info/comment/reply?video_id=7288909913185701125&comment_id=7294900......