当前位置: 首页 > 面试题库 >

numpy逐行求和

冀耀
2023-03-14
问题内容

如何将一个numpy数组行除以该行中所有值的总和?

这是一个例子。但是我很确定有一种花哨且更有效的方法:

import numpy as np
e = np.array([[0., 1.],[2., 4.],[1., 5.]])
for row in xrange(e.shape[0]):
    e[row] /= np.sum(e[row])

结果:

array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

问题答案:

方法1:使用None(或np.newaxis)添加额外的维度,以便广播能够正常运行:

>>> e
array([[ 0.,  1.],
       [ 2.,  4.],
       [ 1.,  5.]])
>>> e/e.sum(axis=1)[:,None]
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

方法2:转置快乐:

>>> (e.T/e.sum(axis=1)).T
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])

axis=如果需要,您可以为简洁而删除该部分。)

方法3 :(根据Jaime的评论进行推广)

使用keepdims参数onsum保留尺寸:

>>> e/e.sum(axis=1, keepdims=True)
array([[ 0.        ,  1.        ],
       [ 0.33333333,  0.66666667],
       [ 0.16666667,  0.83333333]])


 类似资料:
  • 问题内容: 我有两个numpy数组: 我试图得到的是这样的: 我的方法不是很像Numpy,需要针对非常大的数组进行改进(摆脱for循环): 在Numpy中执行此操作的最佳方法是什么?这样生成myarray然后对其进行操作会更好吗? 问题答案: 这种广播技巧:

  • 问题内容: 我有一个3D-numpy数组,实际上包含大小为256x256的图像。现在,我想使用滑块一个接一个地显示这些帧。它似乎真的很慢。有更好的方法吗? 问题答案: 尝试将更新功能重写为 这样您就不必在每次更新时都重新创建所有matplotlib对象

  • 我正在努力阅读附加的TXT文件,以csv形式显示从文件中读取的每个字段,我做了一个接近我想要的代码,但我没有前进。 TXT文件格式: 我的代码在我想要的位置读取第一行,但下面的行我不能,更不用说重复文件中包含的下一个工资单的读数了。 目前的输出是这样的: 出口应该是怎样的 逐行读取和捕获数据,我必须完成一个工资单,它将在输出中形成一行,第二个工资单将在输出中形成第二行,因此,直到txt文件结束,此

  • 问题内容: 我有一个.gz格式的文件。读取此文件的Java类是GZIPInputStream。但是,此类不会扩展Java的BufferedReader类。结果,我无法逐行读取文件。我需要这样的东西 尽管我创建了扩展java的Reader或BufferedReader类并使用GZIPInputStream作为其变量之一的类。 但是,这在我使用时不起作用 有人可以建议如何进行.. 问题答案: 装饰器的

  • 稳定性: 2 - 稳定的 require('readline') 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行。 它可以通过以下方式使用: const readline = require('readline'); 例子,readline 模块的基本用法: const readline = require('readline'); const rl

  • 问题内容: 我有通过http请求访问的数据,并由服务器以逗号分隔的格式发送回了数据,我有以下代码: 文本内容如下: 如何将这些数据保存到CSV文件中。我知道我可以按照以下步骤做一些事情,逐行进行迭代: 但是我不确定现在如何正确地将每一行写入CSV 编辑—>感谢您提供的反馈意见,该解决方案非常简单,可以在下面看到。 解: 问题答案: 一般方式: 要么 使用CSV编写器: 要么 最简单的方法: