I have a function `squared_pairwise_distances_vectorized` and I want to test whether it is correct by comparing it to a naive implementation with for-loops. The naive implementation should be easy to understand and not use any NumPy functions. Fill in the part marked with "[...]" below:

import numpy as np

def squared_pairwise_distances_vectorized(p: np.ndarray, q: np.ndarray) -> np.ndarray:
    """
    Compute the squared pairwise distances between two sets of points p and q.

    Parameters
    ----------
    p : np.ndarray
        The first set of points. Shape is (n, d).
    q : np.ndarray
        The second set of points. Shape is (m, d).

    Returns
    -------
    np.ndarray
        The squared pairwise distances. Shape is (n, m).
    """
    return (p**2).sum(axis=1, keepdims=True) + (q**2).sum(axis=1) - 2 * p @ q.T

def squared_pairwise_distances_naive(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    """
    This function should do the same as squared_pairwise_distances_vectorized,
    but without using any vectorized operations. It is provided for
    comparison purposes only.
    """
    distances = np.zeros((a.shape[0], b.shape[0]))

    [...]

    return distances

def main() -> None:
    p = np.random.rand(7, 2)
    q = np.random.rand(5, 2)

    distances_vectorized = squared_pairwise_distances_vectorized(p, q)
    distances_naive = squared_pairwise_distances_naive(p, q)

    assert np.allclose(distances_vectorized, distances_naive)

if __name__ == "__main__":
    main()

Here's a possible implementation of the squared_pairwise_distances_naive function:

python

def squared_pairwise_distances_naive(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    """
    This function should do the same as squared_pairwise_distances_vectorized,
    but without using any vectorized operations. It is provided for
    comparison purposes only.
    """
    distances = np.zeros((a.shape[0], b.shape[0]))

    for i in range(a.shape[0]):
        for j in range(b.shape[0]):
            distances[i, j] = np.sum((a[i, :] - b[j, :])**2)

    return distances


Here's a possible implementation of the squared_pairwise_distances_naive function:

python

def squared_pairwise_distances_naive(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    """
    This function should do the same as squared_pairwise_distances_vectorized,
    but without using any vectorized operations. It is provided for
    comparison purposes only.
    """
    distances = np.zeros((a.shape[0], b.shape[0]))

    for i in range(a.shape[0]):
        for j in range(b.shape[0]):
            distances[i, j] = np.sum((a[i, :] - b[j, :])**2)

    return distances
ฉันมีฟังก์ชัน `squared_pairwise_distances_vectorized` และฉันต้องการทดสอบว่าถูกต้องหรือไม่โดยเปรียบเทียบกับการใช้งานแบบไร้เดียงสากับ for-loops การใช้งานที่ไร้เดียงสาควรเข้าใจง่ายและไม่ใช้ฟังก์ชัน NumPy ใด ๆ กรอกข้อมูลในส่วนที่มีเครื่องหมาย "[...]" ด้านล่าง: import numpy as np def squared_pairwise_distances_vectorized(p: np.ndarray, q: np.ndarray) -> np.ndarray: """ คำนวณระยะทางยกกำลังสองระหว่างสอง ชุดของจุด p และ q พารามิเตอร์ ---------- p : np.ndarray จุดชุดแรก รูปร่างคือ (n, d) q : np.ndarray จุดชุดที่สอง รูปร่างคือ (m, d) ส่งกลับ ------- np.ndarray ระยะทางตามคู่กำลังสอง รูปร่างคือ (n, m) """ ส่งกลับ (p**2).sum(axis=1, keepdims=True ) + (q**2).sum(axis=1) - 2 * p @ qT def squared_pairwise_distances_naive(a: np.ndarray, b: np.ndarray) -> np.ndarray: """ ฟังก์ชันนี้ควรทำ เช่นเดียวกับ squared_pairwise_distances_vectorized แต่ไม่ได้ใช้การดำเนินการ vectorized ใด ๆ มีไว้เพื่อการเปรียบเทียบเท่านั้น """ Distances = np.zeros((a.shape[0], b.shape[0])) [...] return ระยะทาง def main() -> ไม่มี: p = np.random.rand(7, 2) q = np.random.rand(5, 2) Distances_vectorized = squared_pairwise_distances_vectorized(p, q) Distances_naive = squared_pairwise_distances_naive(p, q) assert np.allclose(distances_vectorized, Distances_naive) if __name__ == "__main__": main() นี่คือการใช้งานที่เป็นไปได้ของฟังก์ชัน squared_pairwise_distances_naive: python def squared_pairwise_distances_naive(a: np.ndarray, b: np.ndarray) -> np.ndarray: """ ฟังก์ชันนี้ควรทำเหมือนกับ squared_pairwise_distances_vectorized แต่ไม่มีการดำเนินการแบบเวกเตอร์ใดๆ มีไว้เพื่อวัตถุประสงค์ในการเปรียบเทียบเท่านั้น """ Distances = np.zeros((a.shape[0], b.shape[0])) สำหรับ i อยู่ในช่วง (a.shape[0]): สำหรับ j อยู่ในช่วง (b.shape[0]) : Distances[i, j] = np.sum((a[i, :] - b[j, :])**2) return Distances นี่คือการใช้งานที่เป็นไปได้ของฟังก์ชัน squared_pairwise_distances_naive: python def squared_pairwise_distances_naive(a: np. ndarray, b: np.ndarray) -> np.ndarray: """ ฟังก์ชันนี้ควรทำเหมือนกับ squared_pairwise_distances_vectorized แต่ไม่ได้ใช้การดำเนินการแบบเวกเตอร์ใดๆ มีไว้เพื่อวัตถุประสงค์ในการเปรียบเทียบเท่านั้น """ Distances = np.zeros((a.shape[0], b.shape[0])) สำหรับ i อยู่ในช่วง (a.shape[0]): สำหรับ j อยู่ในช่วง (b.shape[0]) : Distances[i, j] = np.sum((a[i, :] - b[j, :])**2) ระยะทางย้อนกลับ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence