当前位置: 首页 > 知识库问答 >
问题:

在蟒蛇中处理矩阵

顾宏朗
2023-03-14

我是python的新手,在处理矩阵时遇到了一个问题。

我有一个矩阵,比方说

A = [1 0 0 2; 3 3 3 2; 3 3 0 2; 3 4 4 4]

现在,我想让矩阵中的所有元素都等于零,除了在矩阵中重复最多次的元素。(在这种情况下,它是3)。

所以预期的结果是,

B = [0 0 0 0; 3 3 3 0; 3 3 0 0;3 0 0 0]

如果有人能帮我做这个的python代码,那真的很有帮助。

共有3个答案

萧明贤
2023-03-14
 ----------------------------------------------------
乔凯康
2023-03-14

这是 MATLAB 语法,不是笨拙的:

A = [1 0 0 2; 3 3 3 2; 3 3 0 2; 3 4 4 4]

尽管np。matrix通过以下方式模拟它:

In [172]: A = np.matrix('1 0 0 2; 3 3 3 2; 3 3 0 2; 3 4 4 4')
In [173]: A
Out[173]: 
matrix([[1, 0, 0, 2],
        [3, 3, 3, 2],
        [3, 3, 0, 2],
        [3, 4, 4, 4]])

您的任务是2倍,找到最常见的元素,然后替换所有其他元素。这两个动作都不依赖于矩阵是2d,或者是矩阵而不是数组。

In [174]: A1=A.A1
In [175]: A1
Out[175]: array([1, 0, 0, 2, 3, 3, 3, 2, 3, 3, 0, 2, 3, 4, 4, 4])

np.unique可以给我们频率计数,所以我们可以用(唯一需要1d)精细最频繁的值:

In [179]: u,c = np.unique(A1, return_counts=True)
In [180]: u
Out[180]: array([0, 1, 2, 3, 4])
In [181]: c
Out[181]: array([3, 1, 3, 6, 3])
In [182]: np.argmax(c)
Out[182]: 3
In [183]: u[np.argmax(c)]
Out[183]: 3

我很惊讶Divakar使用sache y模式而不是唯一。他是使用唯一的专家。:)

Divakar使用np.where可能是执行替换的最简单方法。

为了好玩,这里有一种屏蔽数组方法:

In [196]: np.ma.MaskedArray(A, A!=3)
Out[196]: 
masked_matrix(data =
 [[-- -- -- --]
 [3 3 3 --]
 [3 3 -- --]
 [3 -- -- --]],
              mask =
 [[ True  True  True  True]
 [False False False  True]
 [False False  True  True]
 [False  True  True  True]],
        fill_value = 999999)
In [197]: _.filled(0)
Out[197]: 
matrix([[0, 0, 0, 0],
        [3, 3, 3, 0],
        [3, 3, 0, 0],
        [3, 0, 0, 0]])

或就地更改:

In [199]: A[A!=3] = 0
In [200]: A
Out[200]: 
matrix([[0, 0, 0, 0],
        [3, 3, 3, 0],
        [3, 3, 0, 0],
        [3, 0, 0, 0]])
曾航
2023-03-14

设置为None的情况下,使用 >在整个数组中获取最常见的数字。将该数字与输入数组进行比较,得到一个掩码,该掩码可用于通过与输入数组/最常出现的数字进行元素相乘或使用 np将余数设置为零。其中进行选择。

因此,一种方法是-

from scipy.stats import mode

most_occ_num = mode(A, axis=None)[0][0]
out = most_occ_num*(A==most_occ_num)

np.where用于数组输出-

out = np.where(A==most_occ_num,A,0)

样本运行-

In [129]: A = np.matrix([[1, 0 ,0 ,2],[ 3, 3, 3, 2],[ 3 ,3 ,0 ,2],[ 3 ,4 ,4 ,4]])
In [140]: A
Out[140]: 
matrix([[1, 0, 0, 2],
        [3, 3, 3, 2],
        [3, 3, 0, 2],
        [3, 4, 4, 4]])

In [141]: most_occ_num = mode(A, axis=None)[0][0]

In [142]: most_occ_num*(A==most_occ_num)
Out[142]: 
matrix([[0, 0, 0, 0],
        [3, 3, 3, 0],
        [3, 3, 0, 0],
        [3, 0, 0, 0]])

In [143]: np.where(A==most_occ_num,A,0)
Out[143]: 
array([[0, 0, 0, 0],
       [3, 3, 3, 0],
       [3, 3, 0, 0],
       [3, 0, 0, 0]])

 类似资料:
  • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

  • 我需要在我的中添加一个新的目录位置,但问题是我使用的是一个全新安装的系统(Linux),其中尚未定义任何。我读过并使用过,我认为我很了解它,但我不知道当没有存在时会发生什么。 我不能附加到不存在的东西上,但我希望当前发现的所有重要库都能正常工作,因此要小心,我在Python中使用了来获取所有标准值。然后我为定义了一个-变量,包括我刚刚找到的所有节点,以及我的新目录。但是哇,很多东西都停止工作了!P

  • 我正在尝试使用本教程从一个使用selenium and beautiful soup的站点提取房地产列表信息:https://medium.com/@ben.sturm/scraping-house-listing-data-using-Selenium-and-Beautiful Soup-1CBB94BA9492 目的是在找到“下一页”按钮之前收集第一页的所有href链接,导航到下一页并收集该

  • 我想定义一个返回树节点值列表的函数。列表按级别顺序排列(从上到下,从左到右),如果缺少孩子,则在其位置插入“无”。 这是二叉树实现

  • 我是一名程序员,但我之前没有使用Python或其任何库的经验,甚至没有OCR/ALPR的整体经验。我有一个脚本,我做的(基本上复制和粘贴其他脚本在整个网络上),我假装用来识别车牌。但事实是我的代码现在非常糟糕。它可以很好地识别图像中的文本,但它很难捕捉车牌。我很少能用它拿到牌照。 因此,我需要一些帮助,说明我应该如何更改代码以使其更好。 在我的代码中,我只需选择一个图像,将其转换为二进制和BW,然