是否可以为numpy.ndarray
创建仅返回特定形状的特定项目的视图?
我正在一个带有材料应力张量矩阵的项目。我创建了一个ndarray
子像素,它的底部必须保持3x3形状。但是,有一个模块要求张量采用Voigt表示法。不幸的是,由于矩阵中实体的顺序,使用简单的reshape
函数很难做到这一点。
我希望能够保留单个ndarray
子类,并为需要此符号的计算创建一个单独的视图。
到目前为止,我能想到的最好的方法是创建一个函数,该函数从实例的data
属性构造并返回一个新数组。通常这没什么大不了的,但我需要的计算将需要执行数百万次。
答案 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]