基本上,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 中是否已经有一些方法可以实现这一点。我找不到。
请原谅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) 如果这是一个骗局,请道歉.(我找不到它,但我对谷歌不是很好.)
我只是偶然发现了他们使用的一些代码
x = object()
Run Code Online (Sandbox Code Playgroud)
在他们可能想要x比较的地方,不等于已经存在的任何地方.这是语言保证的吗?
在尝试正确理解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) 我有下面的代码
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左右
这背后有一些理论吗?
我希望能够将包含字母的字符串拆分为单独的字母.从我下面的代码; 我期望变量f包含['a','b']但它没有.关于如何解决这个问题的任何想法?
a = "bc"
f = a.split()
print(f)
Run Code Online (Sandbox Code Playgroud)
输出:
['bc']
Run Code Online (Sandbox Code Playgroud) 正如标题所说,我想知道为什么range其单参数形式的内置函数不接受序列作为其参数。我只能看到积极的一面,所以我想知道我是否错过了一些明显的东西。
range(somelist)在他们的range(len(somelist))意思应该是显而易见的时候打字的频率所以我的问题是(请不要仅仅发表意见)
range(len(x))?可选(如果有人碰巧知道)
arange_likeor ?indices_like(或者有吗?)编辑:我本来希望这没有必要,但显然是错误的。range所以我澄清一下:这根本不是善恶的问题。为了争论起见,让我们接受它是语言的一部分并从那里获取一些东西。