![](/img/trans.png)
[英]Python Numpy According a 2-D array's value to assign values to a 3-D array
[英]Restructuring a 2-D numpy array into a 3-D numpy array according to values in a column of a dataframe
我有一个二维 numpy 数组让我们这样说:
matrix([[1., 0., 0., ..., 1., 0., 0.],
[1., 0., 0., ..., 0., 1., 1.],
[1., 0., 0., ..., 1., 0., 0.],
[1., 1., 0., ..., 1., 0., 0.],
[1., 1., 0., ..., 1., 0., 0.],
[1., 1., 0., ..., 1., 0., 0.]])
我想根据 dataframe 的列的值将其转换为 3-D numpy 数组。 假设列是这样的:
df = pd.DataFrame({"Case":[1,1,2,2,3,4]})
最终的 3-D 数组应如下所示:
matrix([
[
[1., 0., 0., ..., 1., 0., 0.], [1., 0., 0., ..., 0., 1., 1.]
],
[
[1., 0., 0., ..., 1., 0., 0.], [1., 1., 0., ..., 1., 0., 0.]
],
[
[1., 1., 0., ..., 1., 0., 0.]
],
[
[1., 1., 0., ..., 1., 0., 0.]
]
])
初始 2-D 数组的前 2 个 arrays 成为最终 3-D 数组的 2-D 数组,因为从 dataframe 的列开始,第一行和第二行都具有相同的值“1”。 同样,接下来的 2 个 arrays 成为另一个 2-D 数组 2 arrays 因为 dataframe 的列的下两个值是 '2' 所以属于一起。 值“3”和“4”只有一行,因此 3-D 阵列的下一个 2-D arrays 每个只有 1 个阵列。
因此,基本上如果 dataframe 的列的两个或多个数字相同,则 2-D 初始矩阵的行的那些索引属于一起并被转换为 2-D 矩阵并作为最终 3- D 矩阵。
我该怎么做呢?
Numpy 对具有不同长度的行的 arrays 没有很好的支持,但您可以将其设为二维 arrays list
:
M = np.ndarray(
[[1., 0., 0., ..., 1., 0., 0.],
[1., 0., 0., ..., 0., 1., 1.],
[1., 0., 0., ..., 1., 0., 0.],
[1., 1., 0., ..., 1., 0., 0.],
[1., 1., 0., ..., 1., 0., 0.],
[1., 1., 0., ..., 1., 0., 0.]]
)
df = pd.DataFrame({"Case":[1,1,2,2,3,4]})
M_per_case = [
np.stack([M[index] for index in df.index[df['Case'] == case]])
for case in set(df['Case'])
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.