小编eve*_*ody的帖子

在numpy中,计算一个矩阵,其中每个单元格包含该行中所有其他条目的乘积

我有一个矩阵

A = np.array([[0.2, 0.4, 0.6],
              [0.5, 0.5, 0.5],
              [0.6, 0.4, 0.2]])
Run Code Online (Sandbox Code Playgroud)

我想要一个新的矩阵,其中第i行和第j列中的条目的值是第i行的所有条目的乘积,除了第j列中该行的单元格.

array([[ 0.24,  0.12,  0.08],
       [ 0.25,  0.25,  0.25],
       [ 0.08,  0.12,  0.24]])
Run Code Online (Sandbox Code Playgroud)

我第一次遇到的解决方案是

np.repeat(np.prod(A, 1, keepdims = True), 3, axis = 1) / A
Run Code Online (Sandbox Code Playgroud)

但只有当条目的值为零时,这才有效.

有什么想法吗?谢谢!

编辑:我已经开发了

B = np.zeros((3, 3))
for i in range(3):
    for j in range(3):
        B[i, j] = np.prod(i, A[[x for x in range(3) if x != j]])
Run Code Online (Sandbox Code Playgroud)

但肯定有更优雅的方法来实现这一点,这使得numpy的高效C后端而不是低效的python循环?

python math numpy matrix

11
推荐指数
1
解决办法
552
查看次数

默认的 type.__call__ 做的不仅仅是调用 __new__ 和 __init__ 吗?

我正在编写一个元类,我想在 __new__ 和 __init__ 之间调用一个额外的方法。

如果我在 __new__ 之前或 __init__ 之后调用该方法,我可以编写例如

class Meta(type):
    def __call__(cls):
        ret = type.__call__()
        ret.extraMethod()
Run Code Online (Sandbox Code Playgroud)

我的诱惑是写

class Meta(type):
    def __call__(cls):
        ret = cls.__new__(cls)
        ret.extraMethod()
        ret.__init__()
        return ret
Run Code Online (Sandbox Code Playgroud)

并自己重现 type.__call__ 的功能。但恐怕我省略了 type.__call__ 的一些微妙之处,这将导致在实现我的元类时出现意外行为。

我不能从 __init__ 或 __new__ 调用 extraMethod 因为我希望我的元类的用户能够像在普通 Python 类中一样覆盖 __init__ 和 __new__,但仍然在 extraMethod 中执行重要的设置代码。

谢谢!

python metaclass

5
推荐指数
1
解决办法
357
查看次数

为什么 HTTP 身份验证的标头称为“授权”而不是“身份验证”

据我了解,“身份验证”意味着证明您就是您所声称的人。被“授权”意味着您有权执行您正在尝试的操作。

那么,为什么在用于 HTTP 身份验证RFC中,您是否通过名为“授权”的标头进行身份验证(证明您就是您所说的人)?您并没有证明您可以进行某项操作。

“基本”身份验证方案基于客户端必须使用每个领域的用户 ID 和密码对其进行身份验证的模型......

...如果用户代理希望发送用户标识“阿拉丁”和密码“芝麻开门”,它将使用以下标题字段:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)

authentication authorization http rfc

4
推荐指数
1
解决办法
142
查看次数

标签 统计

python ×2

authentication ×1

authorization ×1

http ×1

math ×1

matrix ×1

metaclass ×1

numpy ×1

rfc ×1