我有一个海量数据阵列(500k行),看起来像:
id value score
1 20 20
1 10 30
1 15 0
2 12 4
2 3 8
2 56 9
3 6 18
...
Run Code Online (Sandbox Code Playgroud)
如您所见,左侧有一个非唯一ID列,第三列中有各种分数.
我希望快速添加按ID分组的所有分数.在SQL中,这看起来像SELECT sum(score) FROM table GROUP BY id
使用NumPy,我尝试迭代每个ID,按每个ID截断表,然后将该表的得分相加.
table_trunc = table[(table == id).any(1)]
score = sum(table_trunc[:,2])
Run Code Online (Sandbox Code Playgroud)
不幸的是,我发现第一个命令是狗慢.有没有更有效的方法来做到这一点?
我有一个包含六列的大型数据集(称为A,B,C,D,E,F),大约450,000行.我只是试图找到列之间的相关性A和B:
cor(A, B)
Run Code Online (Sandbox Code Playgroud)
我得到了
[1] NA
结果是.我该怎么做才能解决这个问题?
我正在为水位表模型设置一些边界条件,我能够将整个第一行设置为常量值,而不是整个第一列.我np.zeros((11, 1001))用来做一个空矩阵.有谁知道为什么我成功定义第一行,但不是第一列?我已经注意到下面的问题.
import numpy as np
x = range(0, 110, 10)
time = range(0, 5005, 5)
xSize = len(x)
timeSize = len(time)
dx = 10
dt = 5
Sy = 0.1
k = 0.002
head = np.zeros((11, 1001))
head[0:][0] = 16 # sets the first row to 16
head[0][0:] = 16 # DOESN'T set the first column to 16
for t in time:
for i in x[1:len(x)-1]:
head[t+1][i] = head[t][i] + ((dt*k)/(2*Sy)) * (((head[t][i-1]**2) - (2*head[t][i]**2) + (head[t][i+1]**2)) …Run Code Online (Sandbox Code Playgroud) 这是我在这里提出的问题的后续问题.在那里我学习了a)如何为列做这个(见下文)和b)在R中行和列的选择看起来差别很大,这意味着我不能对行使用相同的方法.
所以假设我有一个像这样的pandas数据帧:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(10, size=(6, 6)),
columns=['c' + str(i) for i in range(6)],
index=["r" + str(i) for i in range(6)])
c0 c1 c2 c3 c4 c5
r0 4 2 3 9 9 0
r1 9 0 8 1 7 5
r2 2 6 7 5 4 7
r3 6 9 9 1 3 4
r4 1 1 1 3 0 3
r5 0 8 5 8 2 9
Run Code Online (Sandbox Code Playgroud)
然后我可以通过它们的名称轻松选择行和列,如下所示: …
我想构建正态分布的直方图,并在平均值、标准差和样本量发生变化时更新绘图;类似于这里的帖子。
然而,我对这个update功能很挣扎。在上面的例子中
l, = plot(f(S, 1.0, 1.0))
Run Code Online (Sandbox Code Playgroud)
和
def update(val):
l.set_ydata(f(S, sGmax.val, sKm.val))
Run Code Online (Sandbox Code Playgroud)
使用但绘制直方图时必须如何更改?因此,我不确定如何使用返回值plt.hist,将它们正确传递给update,然后相应地更新绘图。有人能解释一下吗?
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
def update(val):
mv = smean.val
stdv = sstd.val
n_sample = round(sn.val)
# what needs to go here? how to replace xxx
xxx(np.random.normal(mv, stdv, n_sample))
plt.draw()
ax = plt.subplot(111)
plt.subplots_adjust(left=0.25, bottom=0.25)
m0 = -2.5
std0 = 1
n0 = 1000
n_bins0 = 20
nd …Run Code Online (Sandbox Code Playgroud) 我有一个需要在 python 中解决的优化问题。总体结构是
def foo(a, b, c, d, e):
# do something and return one value
def bar(a, b, c, d, e, f, g, h, i, j):
# do something and return one value
def func():
return foo(a, b, c, d, e) - bar(a, b, c, d, e, f, g, h, i, j)
Run Code Online (Sandbox Code Playgroud)
我想使用least_squares最小化并将 的值作为列表返回,其中平方差是和f, g, h, i and j之间的最小值。我不知道如何使用这个。foobarleast_squares
我试过这个:
# Initial values f, g, h, i, j
x0 =[0.5,0.5,0.5,0.05,0.5]
# Constraints …Run Code Online (Sandbox Code Playgroud) 考虑这样一种情况,我们有一个部署在多个服务器中的 Web 应用程序,并且客户端请求登陆到负载均衡器,负载均衡器又将请求路由到实际服务器。
现在,如果我们有太多请求并发,负载均衡器本身会失败吗?假设我们每秒收到 100 万个请求,这会不会超出单个负载均衡器的处理能力?
我们如何设计(至少在概念上)一个处理此类情况的系统?
假设我有一个这样的课程:
class C:
def __init__(self, stuff: int):
self._stuff = stuff
@property
def stuff(self) -> int:
return self._stuff
Run Code Online (Sandbox Code Playgroud)
然后stuff是只读的:
c = C(stuff=10)
print(c.stuff) # prints 10
Run Code Online (Sandbox Code Playgroud)
和
c.stuff = 2
Run Code Online (Sandbox Code Playgroud)
按预期失败
属性错误:无法设置属性
如何使用数据类获得相同的行为?如果我也想拥有一个setter,我可以这样做:
@dataclass
class DC:
stuff: int
_stuff: int = field(init=False, repr=False)
@property
def stuff(self) -> int:
return self._stuff
@stuff.setter
def stuff(self, stuff: int):
self._stuff = stuff
Run Code Online (Sandbox Code Playgroud)
但是没有这个@stuff.setter部分我怎么能做到呢?
我只是学习如何使用sympy,我尝试了一个简单的sin函数集成.当参数sin()具有恒定的相位常数时,integrate()无论相位如何,输出都给出相同的值:0
from sympy import *
w = 0.01
phi = 0.3
k1 = integrate(sin(w*x), (x, 0.0, 10.0))
k2 = integrate(sin(w*x + 0.13), (x, 0.0, 10.0))
k3 = integrate(sin(w*x + phi),(x, 0.0, 10.0))
k1, k2, k3
(0.499583472197429, 0, 0)
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下为什么吗?
目前我正在开发一个从文本文件中提取测量数据的 python 脚本。我正在使用 iPython Notebook 和 Python 2.7
现在我在使用 numpy 数组时遇到了一些奇怪的行为。我对此没有任何解释。
myArray = numpy.zeros((4,3))
myArrayTransposed = myArray.transpose()
for i in range(0,4):
for j in range(0,3):
myArray[i][j] = i+j
print myArray
print myArrayTransposed
Run Code Online (Sandbox Code Playgroud)
造成:
[[ 0. 1. 2.]
[ 1. 2. 3.]
[ 2. 3. 4.]
[ 3. 4. 5.]]
[[ 0. 1. 2. 3.]
[ 1. 2. 3. 4.]
[ 2. 3. 4. 5.]]
Run Code Online (Sandbox Code Playgroud)
因此,无需处理转置数组,该数组中的值就会更新。
这怎么可能?
python ×7
numpy ×3
r ×2
arrays ×1
correlation ×1
dataframe ×1
matplotlib ×1
matrix ×1
modeling ×1
optimization ×1
pointers ×1
python-3.x ×1
scipy ×1
slice ×1
slider ×1
subset ×1
sympy ×1