为特定项创建numpy数组视图

2024-10-01 17:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法为numpy.ndarray创建一个视图,只返回特定形状中的特定项?你知道吗

我在做一个关于材料应力张量矩阵的项目。我已经创建了一个ndarray子壳,它的基部必须保持3x3的形状。然而,有一个模块要求张量采用Voigt表示法。不幸的是,由于矩阵中实体的顺序,用一个简单的reshape函数很难做到这一点。你知道吗

Notation Convention

我希望能够保留单个ndarray子类,并为需要这种表示法的计算创建一个单独的视图。你知道吗

到目前为止,我能想到的最好的方法是创建一个函数,该函数构造并从实例的data属性返回一个新数组。这通常不是什么大问题,但我需要它进行的计算将需要执行数百万次。你知道吗


Tags: 模块项目函数实体numpy视图矩阵材料
1条回答
网友
1楼 · 发布于 2024-10-01 17:23:28

您可以传递索引列表并只提取您感兴趣的值

在这个例子中,我创建了眼睛矩阵,并从中创建了对角线上的视图

tensor = np.eye(3)

>>> diagonal_view = [i for i in range(3)], [i for i in range(3)]
>>> tensor[diagonal_view]
array([1., 1., 1.])

对于你的矩阵形状的例子,你会想要这样的东西

#             1. dimension , 2. dimension
voight_view = [0,1,2,1,2,0],[0,1,2,2,0,1] # voight notation # voight notation
>>> tensor[voight_view]
array([1., 1., 1., 0., 0., 0.])

如果你不想引用,就用

array.copy()

但似乎单纯的作业也能奏效

new_array = tensor[voight_view]

相关问题 更多 >

    热门问题