如何从 numpy.ndarray 中随机选择一些非零元素?

2024-03-06

我已经实现了一个矩阵分解模型,比如 R = U*V,现在我要训练和测试这个模型。

为此,给定一个稀疏矩阵 R(缺失值为零),我想首先在训练中隐藏一些非零元素,并在稍后使用这些非零元素作为测试集。

如何从 numpy.ndarray 中随机选择一些非零元素?此外,我需要记住这些选定元素的索引和列位置,以便在测试中使用这些元素。

例如:

In [2]: import numpy as np

In [4]: mtr = np.random.rand(10,10)

In [5]: mtr
Out[5]: 
array([[ 0.92685787,  0.95496193,  0.76878455,  0.12304856,  0.13804963,
         0.30867502,  0.60245974,  0.00797898,  0.1060602 ,  0.98277982],
       [ 0.88879888,  0.40209901,  0.35274404,  0.73097713,  0.56238248,
         0.380625  ,  0.16432029,  0.5383006 ,  0.0678564 ,  0.42875591],
       [ 0.42343761,  0.31957986,  0.5991212 ,  0.04898903,  0.2908878 ,
         0.13160296,  0.26938537,  0.91442668,  0.72827097,  0.4511198 ],
       [ 0.63979934,  0.33421621,  0.09218392,  0.71520048,  0.57100522,
         0.37205284,  0.59726293,  0.58224992,  0.58690505,  0.4791199 ],
       [ 0.35219557,  0.34954002,  0.93837312,  0.2745864 ,  0.89569075,
         0.81244084,  0.09661341,  0.80673646,  0.83756759,  0.7948081 ],
       [ 0.09173706,  0.86250006,  0.22121994,  0.21097563,  0.55090202,
         0.80954817,  0.97159981,  0.95888693,  0.43151554,  0.2265607 ],
       [ 0.00723128,  0.95690539,  0.94214806,  0.01721733,  0.12552314,
         0.65977765,  0.20845669,  0.44663729,  0.98392716,  0.36258081],
       [ 0.65994805,  0.47697842,  0.35449045,  0.73937445,  0.68578224,
         0.44278095,  0.86743906,  0.5126411 ,  0.75683392,  0.73354572],
       [ 0.4814301 ,  0.92410622,  0.85267402,  0.44856078,  0.03887269,
         0.48868498,  0.83618382,  0.49404473,  0.37328248,  0.18134919],
       [ 0.63999748,  0.48718656,  0.54826717,  0.1001681 ,  0.1940816 ,
         0.3937014 ,  0.48768013,  0.70610649,  0.03213063,  0.88371607]])

In [6]: mtr = np.where(mtr>0.5, 0, mtr)

In [7]: %clear


In [8]: mtr
Out[8]: 
array([[ 0.        ,  0.        ,  0.        ,  0.12304856,  0.13804963,
         0.30867502,  0.        ,  0.00797898,  0.1060602 ,  0.        ],
       [ 0.        ,  0.40209901,  0.35274404,  0.        ,  0.        ,
         0.380625  ,  0.16432029,  0.        ,  0.0678564 ,  0.42875591],
       [ 0.42343761,  0.31957986,  0.        ,  0.04898903,  0.2908878 ,
         0.13160296,  0.26938537,  0.        ,  0.        ,  0.4511198 ],
       [ 0.        ,  0.33421621,  0.09218392,  0.        ,  0.        ,
         0.37205284,  0.        ,  0.        ,  0.        ,  0.4791199 ],
       [ 0.35219557,  0.34954002,  0.        ,  0.2745864 ,  0.        ,
         0.        ,  0.09661341,  0.        ,  0.        ,  0.        ],
       [ 0.09173706,  0.        ,  0.22121994,  0.21097563,  0.        ,
         0.        ,  0.        ,  0.        ,  0.43151554,  0.2265607 ],
       [ 0.00723128,  0.        ,  0.        ,  0.01721733,  0.12552314,
         0.        ,  0.20845669,  0.44663729,  0.        ,  0.36258081],
       [ 0.        ,  0.47697842,  0.35449045,  0.        ,  0.        ,
         0.44278095,  0.        ,  0.        ,  0.        ,  0.        ],
       [ 0.4814301 ,  0.        ,  0.        ,  0.44856078,  0.03887269,
         0.48868498,  0.        ,  0.49404473,  0.37328248,  0.18134919],
       [ 0.        ,  0.48718656,  0.        ,  0.1001681 ,  0.1940816 ,
         0.3937014 ,  0.48768013,  0.        ,  0.03213063,  0.        ]])

给定这样稀疏的 ndarray,我如何选择 20% 的非零元素并记住它们的位置?


我们将使用numpy.random.choice。首先,我们得到数组(i,j)数据非零的索引:

i,j = np.nonzero(x)

然后我们将选择其中的 20%:

ix = np.random.choice(len(i), int(np.floor(0.2 * len(i))), replace=False)

Here ix是一个随机、唯一索引的列表,长度为 20%i and j(长度为i and j是非零条目的数量)。为了恢复索引,我们这样做i[ix] and j[ix],所以我们可以选择 20% 的非零条目x通过写:

print x[i[ix], j[ix]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 numpy.ndarray 中随机选择一些非零元素? 的相关文章

  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 如何在 Python 中的函数入口、内部和退出处进行日志记录

    我希望能够使用 Python 日志记录工具在我的代码中进行简单且一致的日志记录 我能够执行以下操作 我希望所有现有 未来的模块和函数都有 输入 和 完成 日志消息 我不想添加相同的代码片段来定义日志记录参数 如下所示don t want t
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • NumPy 相当于 Keras 函数 utils.to_categorical

    我有一个使用 Keras 进行机器学习的 Python 脚本 我正在构建 X 和 Y 它们分别是特征和标签 标签的构建方式如下 def main depth 10 nclass 101 skip True output True video
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • Numpy 相当于 MATLAB 的 hist [重复]

    这个问题在这里已经有答案了 由于某种原因 Numpy 的 hist 总是返回比 MATLAB 的 hist 少 1 个 bin 例如在 MATLAB 中 x 1 2 2 2 1 4 4 2 3 3 3 3 Rep Val hist x un
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed

随机推荐