我有以下2D数组:
a = array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12],
[13, 14, 15]])
Run Code Online (Sandbox Code Playgroud)
和另一个1D阵列:
b = array([ 1, 2, 3, 4, 5])
Run Code Online (Sandbox Code Playgroud)
然后我想计算类似的东西
c = a - b
Run Code Online (Sandbox Code Playgroud)
旨在获得:
c = array([[0, 1, 2],
[2, 3, 4],
[4, 5, 6],
[6, 7, 8],
[8, 9, 10]])
Run Code Online (Sandbox Code Playgroud)
但我得到错误信息:
Traceback (most recent call last):
Python Shell, prompt 79, line 1
ValueError: operands could not be broadcast together with shapes (5,3) (5,)
Run Code Online (Sandbox Code Playgroud)
我阅读了广播规则,但没有更明智.我可以使用for循环或类似方法进行解决,但应该有一个直接的方法.谢谢
我正在尝试为 的子类编写一个包装方法DataFrame
class SubDataFrame(DataFrame):
...
a = SubDataFrame()
b = a.loc[row, column]
Run Code Online (Sandbox Code Playgroud)
在最后一行中,我想在处理超类中的元数据SubDataFrame之前或之后在类中单独处理元数据。loc
我不知道如何实现这个符号,因为如果我只是定义
def loc(self, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
SubDataFrame括号中的方法loc[]不起作用。( AttributeError: instancemethod has no attribute getitem)。
我找不到关于如何实现这一点的文档。
我有以下持久性问题:
以下代码应绘制一条直线:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
d = pd.date_range(start="1/1/2012", end="2/1/2012", freq="B")
v = np.linspace(1,10,len(d))
plt.plot_date(d,v,"-")
Run Code Online (Sandbox Code Playgroud)
但我得到的只是一条参差不齐的线,因为"plot_date"以某种方式用周末填写"d"中的日期.
有没有办法强制matplotlib采取我的日期(仅工作日),而不是提交周末日期?
>>>d
DatetimeIndex(['2012-01-02', '2012-01-03', '2012-01-04', '2012-01-05',
'2012-01-06', '2012-01-09', '2012-01-10', '2012-01-11',
'2012-01-12', '2012-01-13', '2012-01-16', '2012-01-17',
'2012-01-18', '2012-01-19', '2012-01-20', '2012-01-23',
'2012-01-24', '2012-01-25', '2012-01-26', '2012-01-27',
'2012-01-30', '2012-01-31', '2012-02-01'],
dtype='datetime64[ns]', freq='B')
Run Code Online (Sandbox Code Playgroud) 我有一个数组:
a = np.array([2,3,5,8,3,5])
Run Code Online (Sandbox Code Playgroud)
什么是计算数组的最有效(矢量化)方法,其中每个结果元素是(伪代码):
result[0] = a[0]
for i > 0:
result[i] = result[i-1] + (a[i] - result[i-1]) * factor
Run Code Online (Sandbox Code Playgroud)
我可以使用以下低效代码(因子= 0.5)执行此操作:
a = np.array([2,3,5,8,3,5])
result = np.array([a[0]])
for k in a[1:]:
result = np.append(result, result[-1]+(k-result[-1])*0.5)
Run Code Online (Sandbox Code Playgroud)
这种阻尼功能的结果是:
array([ 2., 2.5, 3.75, 5.875, 4.4375, 4.71875])
Run Code Online (Sandbox Code Playgroud)