我正在尝试使用该loc
方法获取Pandas数据帧的视图,但是当我修改原始数据帧时它没有按预期工作。
我想使用该loc
方法提取 DataFrame 的一行/切片,以便在对 DataFrame 进行修改时,切片反映更改。
让我们看看这个例子:
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':np.arange(0,5,2), 'a':np.arange(3), 'b':np.arange(3)}).set_index('ID')
df
a b
ID
0 0 0
2 1 1
4 2 2
Run Code Online (Sandbox Code Playgroud)
现在我使用 loc 创建一个切片:
slice1 = df.loc[[2],]
slice1
a b
ID
2 1 1
Run Code Online (Sandbox Code Playgroud)
然后我修改原始DataFrame:
df.loc[2, 'b'] = 9
df
a b
ID
0 0 0
2 1 9
4 2 2
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我们的切片并没有像我期待的那样反映这种修改:
slice1
a b
ID
2 1 1
Run Code Online (Sandbox Code Playgroud)
我的期望:
a b
ID …
Run Code Online (Sandbox Code Playgroud) 计算多维 numpy 数组的“内部”点积的最优雅的方法是什么?
假设我有 2 个形状为 (2, 2, 2) 的数组a和b(可以是 (n, n, 2) 且 n>= 2),我想用以下方法计算inner_dot(a, b)定义:
np.array([[np.dot(a[0, 0, :], b[0, 0, :]), np.dot(a[1, 0, :], b[1, 0, :])],
[np.dot(a[0, 1, :], b[0, 1, :]), np.dot(a[1, 1, :], b[1, 1, :])]])
Run Code Online (Sandbox Code Playgroud)
这是一个例子:
a = np.arange(8).reshape(2, 2, 2)
b = np.arange(8).reshape(2, 2, 2)
Run Code Online (Sandbox Code Playgroud)
预期结果:
array([[ 1, 41],
[13, 85]])
Run Code Online (Sandbox Code Playgroud)