[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:ai-engineer\u002Faipy-numpy-vectorization-broadcasting":4,"config":193},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":97,"samples":108},"ai-engineer","AI Engineer","","aipy-numpy-vectorization-broadcasting","Aipy Numpy Vectorization Broadcasting","en",75,2025,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94],{"key":19,"name":20,"count":11},"agents-tool-use","Agents Tool Use",{"key":22,"name":23,"count":11},"aimlops-deployment-strategies-ml","Aimlops Deployment Strategies Ml",{"key":25,"name":26,"count":11},"aimlops-experiment-tracking-reproducibility","Aimlops Experiment Tracking Reproducibility",{"key":28,"name":29,"count":11},"aimlops-feature-store-data-versioning","Aimlops Feature Store Data Versioning",{"key":31,"name":32,"count":11},"aimlops-ml-cicd-pipelines","Aimlops Ml Cicd Pipelines",{"key":34,"name":35,"count":11},"aimlops-model-monitoring-drift-detection","Aimlops Model Monitoring Drift Detection",{"key":37,"name":38,"count":11},"aimlops-model-versioning-registry","Aimlops Model Versioning Registry",{"key":40,"name":41,"count":11},"aipy-async-concurrency-ml-serving","Aipy Async Concurrency Ml Serving",{"key":43,"name":44,"count":11},"aipy-data-pipeline-dataloader","Aipy Data Pipeline Dataloader",{"key":46,"name":47,"count":11},"aipy-gpu-memory-management","Aipy Gpu Memory Management",{"key":8,"name":9,"count":11},{"key":50,"name":51,"count":11},"aipy-python-ml-packaging-environments","Aipy Python Ml Packaging Environments",{"key":53,"name":54,"count":11},"aipy-tensor-ops-autograd","Aipy Tensor Ops Autograd",{"key":56,"name":57,"count":11},"embeddings-vector-search","Embeddings Vector Search",{"key":59,"name":60,"count":11},"evaluation-testing","Evaluation Testing",{"key":62,"name":63,"count":11},"fine-tuning-adaptation","Fine Tuning Adaptation",{"key":65,"name":66,"count":11},"inference-serving","Inference Serving",{"key":68,"name":69,"count":11},"llm-fundamentals","Llm Fundamentals",{"key":71,"name":72,"count":11},"prompt-engineering","Prompt Engineering",{"key":74,"name":75,"count":11},"rag-chunking-indexing","Rag Chunking Indexing",{"key":77,"name":78,"count":11},"rag-embeddings-similarity","Rag Embeddings Similarity",{"key":80,"name":81,"count":11},"rag-evaluation","Rag Evaluation",{"key":83,"name":84,"count":11},"rag-generation-context","Rag Generation Context",{"key":86,"name":87,"count":11},"rag-reranking-fusion","Rag Reranking Fusion",{"key":89,"name":90,"count":11},"rag-retrieval","Rag Retrieval",{"key":92,"name":93,"count":11},"rag-retrieval-search","Rag Retrieval Search",{"key":95,"name":96,"count":11},"safety-guardrails","Safety Guardrails",[98,102,105],{"key":99,"name":100,"count":101},"llm-rag","LLM\u002FRAG",450,{"key":103,"name":104,"count":101},"mlops","MLOps",{"key":106,"name":107,"count":101},"python","Python",[109,127,140,154,167,180],{"id":110,"topic":9,"difficulty":111,"body":112,"options":113,"correct_key":115,"explanation":126},"019f9407-fce5-7589-ba16-d97d7a41ad22",1,"In NumPy broadcasting, two dimensions are compared starting from which end of the shape tuples?",[114,117,120,123],{"key":115,"text":116},"a","From the trailing (rightmost) end; missing leading dimensions are treated as size 1.",{"key":118,"text":119},"b","From the leading (leftmost) end; missing trailing dimensions are treated as size 1. This reverses the actual comparison direction NumPy uses for shape alignment.",{"key":121,"text":122},"c","From the middle outward, comparing the largest dimension first.",{"key":124,"text":125},"d","Dimensions are never compared; only total element counts must match.","Broadcasting aligns shapes from the trailing dimension and works backward; if one array has fewer dimensions, size-1 dimensions are implicitly prepended. (b) reverses the direction. (c) and (d) describe mechanisms broadcasting does not use.",{"id":128,"topic":9,"difficulty":111,"body":129,"options":130,"correct_key":118,"explanation":139},"019f9407-fcef-727b-9924-a8f1b372b43c","```python\nimport numpy as np\na = np.ones((3, 4))\nb = np.array([10, 20, 30, 40])\nresult = a + b\n```\nWhat is `result.shape`?",[131,133,135,137],{"key":115,"text":132},"(4, 4), because `b` is repeated once per its own length.",{"key":118,"text":134},"(3, 4), because `b`'s shape (4,) is treated as (1, 4) and broadcast across the 3 rows.",{"key":121,"text":136},"This raises a `ValueError`, because `a` and `b` do not have the same number of dimensions.",{"key":124,"text":138},"(3,), because `b` is reduced to match `a`'s first dimension.","`b` has shape (4,), which aligns with `a`'s trailing dimension (also 4); the missing leading dimension is treated as 1, so `b` broadcasts to (1, 4) and then stretches across all 3 rows, giving (3, 4). (a) miscomputes the shape. (c) wrongly assumes dimension count must match exactly. (d) describes reduction, not broadcasting.",{"id":141,"topic":9,"difficulty":142,"body":143,"options":144,"correct_key":121,"explanation":153},"019f9407-fcf3-7da8-8589-5a633247f744",2,"```python\nimport numpy as np\na = np.ones((3, 4))\nc = np.array([1, 2, 3])\nresult = a + c\n```\nWhat happens?",[145,147,149,151],{"key":115,"text":146},"`c` is transposed automatically and broadcasts to (3, 4) as columns.",{"key":118,"text":148},"`result` has shape (3, 4), with `c` broadcast across the 4 columns.",{"key":121,"text":150},"This raises a `ValueError`, because the trailing dimensions (4 vs 3) are unequal and neither is 1.",{"key":124,"text":152},"`result` has shape (3, 3), since NumPy trims `a` to match `c`'s length. This is a plausible-sounding but incorrect description of how NumPy resolves shape mismatches during arithmetic.","`a` has shape (3, 4) and `c` has shape (3,); comparing trailing dimensions gives 4 vs 3, which are unequal and neither is 1, so broadcasting fails with a `ValueError`. (a) and (d) describe outcomes broadcasting does not produce; NumPy never auto-transposes or trims arrays to make shapes fit. (b) is the shape that would result only if `c` had shape (4,), not (3,).",{"id":155,"topic":9,"difficulty":111,"body":156,"options":157,"correct_key":124,"explanation":166},"019f9407-fcff-7c99-b17d-802dcf1297f6","When you add a Python scalar to a NumPy array, e.g. `arr + 5`, how does broadcasting treat the scalar?",[158,160,162,164],{"key":115,"text":159},"It raises an error unless the scalar is first wrapped in a one-element array with a matching shape.",{"key":118,"text":161},"It is only added to the first element of `arr`, leaving the rest unchanged.",{"key":121,"text":163},"It is converted into an array whose shape exactly matches `arr`'s shape by copying `arr`'s dimension sizes ahead of time.",{"key":124,"text":165},"It is treated as having a shape of `()` (zero dimensions), which broadcasts against every dimension of `arr`.","A scalar behaves as a 0-dimensional array; broadcasting treats every one of its (nonexistent) dimensions as size 1, so it stretches to match any shape of `arr`. (a) and (b) describe restrictions or behavior that don't exist. (c) describes the conceptual result but misstates the mechanism — no explicit array copy of shape happens beforehand.",{"id":168,"topic":9,"difficulty":111,"body":169,"options":170,"correct_key":115,"explanation":179},"019f9407-fd02-7ee4-9c86-8e171d1540a9","Why is a vectorized NumPy operation like `a + b` typically much faster than an equivalent Python `for` loop over the elements?",[171,173,175,177],{"key":115,"text":172},"The loop over elements runs inside compiled C code, avoiding per-element Python bytecode dispatch and type-checking overhead.",{"key":118,"text":174},"NumPy automatically runs the operation on multiple CPU cores, while a Python loop is always single-core.",{"key":121,"text":176},"NumPy arrays store elements as Python objects with cached results, so repeated operations are free after the first call.",{"key":124,"text":178},"The Python `for` loop always allocates a new list on every iteration, which vectorized code skips entirely.","NumPy's ufuncs iterate over array data in compiled C loops operating on raw, uniformly-typed memory, avoiding the per-element overhead of the Python interpreter (bytecode dispatch, dynamic type checks, object boxing) that a plain `for` loop incurs. (b) is not guaranteed — most elementwise ufuncs run single-threaded by default. (c) misdescribes array storage; NumPy stores raw numeric values, not Python objects, and there's no caching mechanism like this. (d) is not the actual reason for the loop's slowness.",{"id":181,"topic":9,"difficulty":142,"body":182,"options":183,"correct_key":118,"explanation":192},"019f9407-fd05-75c7-a40b-1cba8955b3bb","```python\nimport numpy as np\nn = 1_000_000\narr = np.arange(n)\n\ndef loop_sum_sq():\n    total = 0\n    for x in arr:\n        total += x * x\n    return total\n\ndef vec_sum_sq():\n    return np.sum(arr * arr)\n```\nBoth functions compute the same mathematical result. What is the main practical difference?",[184,186,188,190],{"key":115,"text":185},"`vec_sum_sq` produces a different numeric result due to rounding, since NumPy sums in a random order.",{"key":118,"text":187},"`loop_sum_sq` is far slower because it re-enters the Python interpreter for every one of the million elements; `vec_sum_sq` does the multiply-and-sum in compiled loops.",{"key":121,"text":189},"`loop_sum_sq` is faster because Python integers avoid NumPy's fixed-width overflow issues entirely.",{"key":124,"text":191},"There is no meaningful difference for `n = 1_000_000`; both approaches take about the same wall-clock time.","Iterating `for x in arr` yields plain Python objects one at a time and executes the loop body (attribute lookups, multiplication, addition) through the Python interpreter for each of the million elements, which is comparatively slow. `vec_sum_sq` performs the multiplication and the summation as vectorized C-level operations. (a) is false for integer sums — order doesn't introduce rounding here. (c) is not a real advantage; it's irrelevant to the observed slowdown and NumPy's default integer dtype here has ample range. (d) understates the difference, which is typically substantial (often tens of times or more) at this scale.",{"fields":194,"seniorities":372,"interview_shapes":373,"locales":378,"oauth":380,"question_count":383,"coach_enabled":384,"jd_match_enabled":384},[195,218,238,255,279,286,305,324,346,353,359,366],{"key":196,"name_tr":197,"name_en":197,"sort":111,"specializations":198},"backend","Backend",[199,202,205,206,209,212,215],{"key":200,"name":201,"field":196},"general","Genel",{"key":203,"name":204,"field":196},"go","Go",{"key":106,"name":107,"field":196},{"key":207,"name":208,"field":196},"java","Java",{"key":210,"name":211,"field":196},"csharp","C#\u002F.NET",{"key":213,"name":214,"field":196},"nodejs","Node.js",{"key":216,"name":217,"field":196},"php","PHP",{"key":219,"name_tr":220,"name_en":220,"sort":142,"specializations":221},"frontend","Frontend",[222,223,226,229,232,235],{"key":200,"name":201,"field":219},{"key":224,"name":225,"field":219},"javascript","JavaScript",{"key":227,"name":228,"field":219},"typescript","TypeScript",{"key":230,"name":231,"field":219},"react","React",{"key":233,"name":234,"field":219},"vue","Vue",{"key":236,"name":237,"field":219},"angular","Angular",{"key":239,"name_tr":240,"name_en":240,"sort":241,"specializations":242},"fullstack","Fullstack",3,[243,244,245,246,247,248,249,250,251,252,253,254],{"key":200,"name":201,"field":239},{"key":203,"name":204,"field":196},{"key":106,"name":107,"field":196},{"key":207,"name":208,"field":196},{"key":210,"name":211,"field":196},{"key":213,"name":214,"field":196},{"key":216,"name":217,"field":196},{"key":224,"name":225,"field":219},{"key":227,"name":228,"field":219},{"key":230,"name":231,"field":219},{"key":233,"name":234,"field":219},{"key":236,"name":237,"field":219},{"key":256,"name_tr":257,"name_en":257,"sort":258,"specializations":259},"devops-cloud","DevOps \u002F Cloud",4,[260,261,264,267,270,273,276],{"key":200,"name":201,"field":256},{"key":262,"name":263,"field":256},"aws","AWS",{"key":265,"name":266,"field":256},"gcp","GCP",{"key":268,"name":269,"field":256},"azure","Azure",{"key":271,"name":272,"field":256},"kubernetes","Kubernetes",{"key":274,"name":275,"field":256},"terraform","Terraform",{"key":277,"name":278,"field":256},"linux","Linux",{"key":5,"name_tr":6,"name_en":6,"sort":280,"specializations":281},5,[282,283,284,285],{"key":200,"name":201,"field":5},{"key":106,"name":107,"field":5},{"key":99,"name":100,"field":5},{"key":103,"name":104,"field":5},{"key":287,"name_tr":288,"name_en":289,"sort":290,"specializations":291},"database","Veritabanı","Database",6,[292,293,296,299,302],{"key":200,"name":201,"field":287},{"key":294,"name":295,"field":287},"postgresql","PostgreSQL",{"key":297,"name":298,"field":287},"mysql","MySQL",{"key":300,"name":301,"field":287},"mongodb","MongoDB",{"key":303,"name":304,"field":287},"redis","Redis",{"key":306,"name_tr":307,"name_en":308,"sort":309,"specializations":310},"mobile","Mobil","Mobile",7,[311,312,315,318,321],{"key":200,"name":201,"field":306},{"key":313,"name":314,"field":306},"ios-swift","iOS (Swift)",{"key":316,"name":317,"field":306},"android-kotlin","Android (Kotlin)",{"key":319,"name":320,"field":306},"flutter","Flutter",{"key":322,"name":323,"field":306},"react-native","React Native",{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"security","Güvenlik","Security",8,[330,331,334,337,340,343],{"key":200,"name":201,"field":325},{"key":332,"name":333,"field":325},"appsec","AppSec",{"key":335,"name":336,"field":325},"offensive-pentest","Offensive \u002F Pentest",{"key":338,"name":339,"field":325},"cloud-security","Cloud Security",{"key":341,"name":342,"field":325},"devsecops","DevSecOps",{"key":344,"name":345,"field":325},"blue-team-incident","Blue Team \u002F Incident",{"key":347,"name_tr":348,"name_en":349,"sort":350,"specializations":351},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[352],{"key":200,"name":201,"field":347},{"key":354,"name_tr":355,"name_en":355,"sort":356,"specializations":357},"data-engineer","Data Engineer",10,[358],{"key":200,"name":201,"field":354},{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"game-dev","Oyun Geliştirme","Game Development",11,[365],{"key":200,"name":201,"field":360},{"key":367,"name_tr":368,"name_en":368,"sort":369,"specializations":370},"ml-engineer","ML Engineer",12,[371],{"key":200,"name":201,"field":367},[14,15,16],{"junior":374,"mid":376,"senior":377},{"questions":375,"median_sec":3},20,{"questions":375,"median_sec":3},{"questions":375,"median_sec":3},[379,10],"tr",[381,382],"google","github",21750,true]