为特定项目创建一个numpy数组视图

时间:2019-02-26 21:56:01

标签: python numpy-ndarray

是否可以为numpy.ndarray创建仅返回特定形状的特定项目的视图?

我正在一个带有材料应力张量矩阵的项目。我创建了一个ndarray子像素,它的底部必须保持3x3形状。但是,有一个模块要求张量采用Voigt表示法。不幸的是,由于矩阵中实体的顺序,使用简单的reshape函数很难做到这一点。

Notation Convention

我希望能够保留单个ndarray子类,并为需要此符号的计算创建一个单独的视图。

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

1 个答案:

答案 0 :(得分:1)

您可以传递索引列表,并仅提取您感兴趣的那些值

在此示例中,我创建了Eye矩阵,并从中创建了对角线视图。

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]