我正在使用 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)
这是我正在使用的代码,我做错了什么。
输出:
在 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 中创建长度 = 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) 中创建这个列表?
我有一个由日期列组成的数据框,但日期列是字符串。如何检查日期是在上半月还是下半月,并添加带有帐单日期的另一列
例如
如果日期是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) 在这个程序中有一个故意的语法错误
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 解释器执行。为什么执行方式不同?
给定以下数组:
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 使总和相等,这样我就可以向量化更大的方程。
假设我有以下数据:
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)]
如果我可以传入列列表和要检查的条件,那就太好了。
我试图找到使用 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) 我想在数组及其索引中找到相等的值(如果它们连续出现两次以上)。
[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)
但这不是我要找的。当然,我可以编写一个循环并比较两个值,然后对它们进行计数,但可能有更优雅的解决方案吗?