Документация numpy
является вашим другом: -).
np.cross
и np.linalg.norm
также работают с массивами векторов. И они поддерживают мощный ключевой аргумент axis
.
Я предполагаю, что ваш v_c
имеет форму (N, 3)
, где N
- ваше количество вершин. Давайте для простоты предположим, что это кратно трем, тогда:
N = 30
v_c = np.random.random((N, 3))
v1 = v_c[N//3:2*N//3, :] - v_c[:N//3, :]
v2 = v_c[2*N//3:, :] - v_c[:N//3, :]
area = 0.5*np.linalg.norm(np.cross(v1, v2), axis=1)
Обратите внимание, что это включает создание временных массивов, поэтому, возможно, следите за очень большими N
.