小编Mic*_*sny的帖子

在 matplotlib 中绘制多条线图

我正在使用 matplotlib 绘制折线图,​​每当我尝试绘制第二个折线图时,y 轴都会打印两次。

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5]
y1 = ['1000', '13k', '26k', '42k', '60k', '81k']
y2 = ['1000', '13k', '27k', '43k', '63k', '85k']

plt.plot(x, y1)
plt.plot(x, y2, '-.')

plt.xlabel("X-axis data")
plt.ylabel("Y-axis data")
plt.title('multiple plots')
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,我做错了什么。

输出:

输出

python matplotlib

15
推荐指数
3
解决办法
8万
查看次数

pytorch中的retain_grad()如何工作?我发现它的位置改变了毕业结果

在 pytorch 中的一个简单测试中,我想查看非叶张量中的 grad,因此我使用retain_grad():

import torch
a = torch.tensor([1.], requires_grad=True)
y = torch.zeros((10))
gt = torch.zeros((10))

y[0] = a
y[1] = y[0] * 2
y.retain_grad()

loss = torch.sum((y-gt) ** 2)
loss.backward()
print(y.grad)
Run Code Online (Sandbox Code Playgroud)

它给了我一个正常的输出:

tensor([2., 4., 0., 0., 0., 0., 0., 0., 0., 0.])
Run Code Online (Sandbox Code Playgroud)

但是当我在 y[1] 之前和 y[0] 分配之后使用保留 grad() 时:

import torch
a = torch.tensor([1.], requires_grad=True)
y = torch.zeros((10))
gt = torch.zeros((10))

y[0] = a
y.retain_grad()
y[1] = y[0] * 2

loss = torch.sum((y-gt) ** 2)
loss.backward()
print(y.grad)
Run Code Online (Sandbox Code Playgroud)

现在输出更改为:

tensor([10., …
Run Code Online (Sandbox Code Playgroud)

python pytorch

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

[0]*n 在 Python 中以 O(n) 或 O(1) 运行

我在接受采访时,面试官问我:在 Python 中创建长度 = n 的全零列表的最快方法是什么。我的回答是:

    l = [0 for i in range(n)]
Run Code Online (Sandbox Code Playgroud)

其阶数为 O(n)。它被拒绝了,因为面试官告诉我下面的代码在 O(1) 中运行。

    l = [0]*n
Run Code Online (Sandbox Code Playgroud)

我的问题是,Python 如何在 O(1) 中创建这个列表?

python big-o list

6
推荐指数
0
解决办法
89
查看次数

检查日期是否位于 pandas 的上半月或下半月

我有一个由日期列组成的数据框,但日期列是字符串。如何检查日期是在上半月还是下半月,并添加带有帐单日期的另一列

例如

如果日期是08-10-2020(格式为 dd-mm-yyyy),则该billing date列将包含同月 16 日,如果日期位于 17-31 之间,则计费日期将包含下个月的 1 日

数据:

print(df['dispatch_date'].head())

0    01-10-2020
1    07-10-2020
2    17-10-2020
3    16-10-2020
4    09-10-2020
Name: dispatch_date, dtype: object
Run Code Online (Sandbox Code Playgroud)

示例输出:

                 billing date
0    01-10-2020  16-10-2020
1    07-10-2020  16-10-2020
2    17-10-2020  01-11-2020
3    16-10-2020  01-11-2020
4    09-10-2020  16-10-2020
Run Code Online (Sandbox Code Playgroud)

python pandas

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

为什么 jupyter Notebook 运行的单元格出现语法错误?

在这个程序中有一个故意的语法错误

import random
random.seed(16)

while True:
    n = random.randrange(1,101)
    print(n)
    if n < 30: break

if n==20:
    break
Run Code Online (Sandbox Code Playgroud)

在 google colab 上运行,!python test.py产量符合预期

import random
random.seed(16)

while True:
    n = random.randrange(1,101)
    print(n)
    if n < 30: break

if n==20:
    break
Run Code Online (Sandbox Code Playgroud)

但是在 google colab 上作为 juypter 笔记本单元运行给出了输出

  File "test.py", line 10
    break
    ^
SyntaxError: 'break' outside loop
Run Code Online (Sandbox Code Playgroud)

在 juypter 笔记本中,程序运行直到离开 while 循环。我的理解是,单元格将保存在临时文件中,并使用标准 python 解释器执行。为什么执行方式不同?

python jupyter-notebook google-colaboratory

5
推荐指数
0
解决办法
481
查看次数

为什么这些 numpy 操作不等效,我该如何解决这个问题?

给定以下数组:

X = np.array([[1, 27, 3], [4, -1, 6]])
W = np.array([2, 4, 3])
Run Code Online (Sandbox Code Playgroud)

这两个方程是等价的:

sum_a = 0
for l in range(len(X)):
    sum_a += np.sum(W * X[l])   # 141
sum_b = np.sum(np.sum(W * X))   # 141
Run Code Online (Sandbox Code Playgroud)

但这两个不是:

sum_a = 0
for l in range(len(X)):
    sum_a += np.exp(np.sum(W * X[l]))   # 4.797813327299302e+51
sum_b = np.sum(np.exp(np.sum(W * X)))   # 1.7199742630376623e+61 
Run Code Online (Sandbox Code Playgroud)

为什么会这样?对于第二种情况,如何使 sum_b 等于 sum_a ?我特别想使用 numpy 使总和相等,这样我就可以向量化更大的方程。

python arrays numpy

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

Pandas高效过滤:多列上相同的过滤条件

假设我有以下数据:

df = pd.DataFrame({'col1': [1, 2, 1],
                   'col2': [2, 4, 3],
                   'col3': [3, 6, 5],
                   'col4': [4, 8, 7]})
Run Code Online (Sandbox Code Playgroud)

有没有办法使用列表理解来有效地过滤数据?例如,如果我想查找 col2 为偶数或 col3 为偶数或 col 4 为偶数的所有情况,是否有比只写这个更简单的方法?

df[(df['col2'] % 2 == 0) | (df['col3'] % 2 == 0) | (df['col4'] % 2 == 0)]

如果我可以传入列列表和要检查的条件,那就太好了。

python list filter pandas

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

使用 Numba 对 2 个矩阵求和的最快方法是什么?

我试图找到使用 Numba 对两个相同大小的矩阵求和的最快方法。我想出了 3 种不同的方法,但没有一种能打败 Numpy。这是我的代码:

import numpy as np
from numba import njit,vectorize, prange,float64
import timeit
import time

# function 1: 
def sum_numpy(A,B):
    return A+B

# function 2: 
sum_numba_simple= njit(cache=True,fastmath=True) (sum_numpy)

# function 3: 
@vectorize([float64(float64, float64)])
def sum_numba_vectorized(A,B):
    return A+B

# function 4: 
@njit('(float64[:,:],float64[:,:])', cache=True, fastmath=True, parallel=True)
def sum_numba_loop(A,B):
    n=A.shape[0]
    m=A.shape[1]
    C = np.empty((n, m), A.dtype)

    for i in prange(n):
        for j in prange(m):
            C[i,j]=A[i,j]+B[i,j]
  
    return C

#Test the functions with 2 matrices of size 1,000,000x3:
N=1000000
np.random.seed(123)
A=np.random.uniform(low=-10, …
Run Code Online (Sandbox Code Playgroud)

performance time multithreading numpy numba

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

查找数组中连续值的游程和长度

我想在数组及其索引中找到相等的值(如果它们连续出现两次以上)。

[0, 3, 0, 1, 0, 1, 2, 1, 2, 2, 2, 2, 1, 3, 4]
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,我会发现值“2”从位置“8”开始出现“4”次。有没有内置函数可以做到这一点?

我找到了一种方法collections.Counter

collections.Counter(a)
# Counter({0: 3, 1: 4, 3: 2, 5: 1, 4: 1})
Run Code Online (Sandbox Code Playgroud)

但这不是我要找的。当然,我可以编写一个循环并比较两个值,然后对它们进行计数,但可能有更优雅的解决方案吗?

python arrays numpy

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