小编Pau*_*zer的帖子

是否有 numpy 方法可以通过将两个一维数组相加来创建一个二维数组?

基本上,s_{i,j} = a_i + b_j

如果n=len(a)m=len(b),则s.shape(n,m)。因此,上面的加法是不可交换的。

它涉及一些诡计:

s = np.tile(a.reshape(n,1),m).reshape(n,m) + np.tile(b,n).reshape(n,m)
Run Code Online (Sandbox Code Playgroud)

但我想知道 numpy 中是否已经有一些方法可以实现这一点。我找不到。

numpy

3
推荐指数
1
解决办法
183
查看次数

Python嵌套函数是copy-on-could-write吗?

请原谅Python爱好者一个主要的学术问题.

我对嵌套函数的成本(如果有的话)感兴趣 - 不是使用闭包等的功能合理的函数,而是保持外部名称空间整齐.

所以我做了一个简单的测量:

def inner(x):
    return x*x

def flat(x):
    return inner(x)

def nested(x):
    def inner(x):
        return x*x
    return inner(x)

# just to get a feel of the cost of having two more lines
def fake_nested(x):
    y = x
    z = x
    return inner(x)

from timeit import timeit

print(timeit('f(3)', globals=dict(f=flat)))
print(timeit('f(3)', globals=dict(f=nested)))
print(timeit('f(3)', globals=dict(f=fake_nested)))

# 0.17055258399341255
# 0.23098028398817405
# 0.19381927204085514
Run Code Online (Sandbox Code Playgroud)

所以似乎有一些开销,它似乎比通过再增加两行来解释.

但是,似乎def每次调用外部函数时都不会计算内部语句,实际上内部函数对象似乎是缓存的:

def nested(x):
    def inner(x):
        return x*x
    print(id(inner), id(inner.__code__), id(inner.__closure__))
    return inner(x)

nested(3)
x = [list(range(i)) …
Run Code Online (Sandbox Code Playgroud)

python nested function copy-on-write

3
推荐指数
1
解决办法
108
查看次数

是否保证比较不等于任何其他对象的对象实例(但不是子类)?

如果这是一个骗局,请道歉.(我找不到它,但我对谷歌不是很好.)

我只是偶然发现了他们使用的一些代码

x = object()
Run Code Online (Sandbox Code Playgroud)

在他们可能想要x比较的地方,不等于已经存在的任何地方.这是语言保证的吗?

python

3
推荐指数
1
解决办法
60
查看次数

numpy索引:不应该落后省略号是多余的?

在尝试正确理解numpy索引规则时,我偶然发现了以下内容.我曾经认为索引中的尾随省略号没有做任何事情.琐事不是吗?除此之外,事实并非如此:

Python 3.5.2 (default, Nov 11 2016, 04:18:53) 
[GCC 4.8.5] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> 
>>> D2 = np.arange(4).reshape((2, 2))
>>>
>>> D2[[1, 0]].shape; D2[[1, 0], ...].shape
(2, 2)
(2, 2)
>>> D2[:, [1, 0]].shape; D2[:, [1, 0], ...].shape
(2, 2)
(2, 2)
>>> # so far so expected; now
... 
>>> D2[[[1, 0]]].shape; D2[[[1, 0]], ...].shape
(2, 2)
(1, 2, 2)
>>> # ouch!
...
>>> D2[:, …
Run Code Online (Sandbox Code Playgroud)

python numpy array-indexing

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

为什么结果总是在2.87左右

我有下面的代码

result=0
loop_n=10000
for i in range(loop_n):
    result+=np.random.rand(3,4,10).std()
result=result/loop_n
print(result)
Run Code Online (Sandbox Code Playgroud)

据我了解,如果我多次跑步,结果应该会有所不同,因为结果来自随机,但实际上结果始终在0.287左右

这背后有一些理论吗?

python random math numpy

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

Python:如何拆分没有逗号或空格的字符串

我希望能够将包含字母的字符串拆分为单独的字母.从我下面的代码; 我期望变量f包含['a','b']但它没有.关于如何解决这个问题的任何想法?

a = "bc"
f = a.split()
print(f)
Run Code Online (Sandbox Code Playgroud)

输出:

['bc']
Run Code Online (Sandbox Code Playgroud)

python string

0
推荐指数
1
解决办法
123
查看次数

python range 函数不接受序列参数有什么充分的理由吗?

正如标题所说,我想知道为什么range其单参数形式的内置函数不接受序列作为其参数。我只能看到积极的一面,所以我想知道我是否错过了一些明显的东西。

  • 考虑到我和我确信许多其他人range(somelist)在他们的range(len(somelist))意思应该是显而易见的时候打字的频率
  • 我看不出有任何其他方式可以解释它
  • 它将消除冗余和一级括号嵌套,并在换行对可读性特别有害的位置节省打字和行宽
  • 我看不出它破坏了任何代码

所以我的问题是(请不要仅仅发表意见)

  • 有没有我可能错过的好的(客观的,Python Zen是可以接受的)论点?
  • 也许已经有一个方便的功能了range(len(x))

可选(如果有人碰巧知道)

  • Python 开发人员考虑过这一点吗?BDFL 的立场是什么?
  • 为什么numpy中没有arange_likeor ?indices_like(或者有吗?)

编辑:我本来希望这没有必要,但显然是错误的。range所以我澄清一下:这根本不是善恶的问题。为了争论起见,让我们接受它是语言的一部分并从那里获取一些东西。

python loops design-patterns numpy

-1
推荐指数
1
解决办法
824
查看次数