为特定项目创建一个 numpy 数组视图
Create a numpy array view for specific items
有没有办法为 numpy.ndarray
创建一个视图,它只会 return 特定形状的特定项目?
我正在处理一个带有 material 应力张量矩阵的项目。我已经创建了一个 ndarray
sublcass,它的底部必须保持 3x3 的形状。然而,有一个模块要求张量采用 Voigt 表示法。不幸的是,由于矩阵中实体的顺序,这不容易通过简单的 reshape
函数完成。
我希望能够保留单个 ndarray
子类,并为需要此表示法的计算创建一个单独的视图。
截至目前,我能想出的最好办法是创建一个函数,该函数从实例的 data
属性 构造并 returns 一个新数组。这通常没什么大不了的,但我需要它的计算将需要执行数百万次。
您可以传递索引列表并仅提取您感兴趣的那些值
在此示例中,我创建了 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]
有没有办法为 numpy.ndarray
创建一个视图,它只会 return 特定形状的特定项目?
我正在处理一个带有 material 应力张量矩阵的项目。我已经创建了一个 ndarray
sublcass,它的底部必须保持 3x3 的形状。然而,有一个模块要求张量采用 Voigt 表示法。不幸的是,由于矩阵中实体的顺序,这不容易通过简单的 reshape
函数完成。
我希望能够保留单个 ndarray
子类,并为需要此表示法的计算创建一个单独的视图。
截至目前,我能想出的最好办法是创建一个函数,该函数从实例的 data
属性 构造并 returns 一个新数组。这通常没什么大不了的,但我需要它的计算将需要执行数百万次。
您可以传递索引列表并仅提取您感兴趣的那些值
在此示例中,我创建了 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]