words, truth and reality
the problem with playing with words or truth or reality is that if you play
with them for long enough, you forget what they actually are.
what is a vector?
i was talking to my wife today about this
comment on
hacker news and i realized i keep in my head
several simultaneous but non-obvious definitions for the term
"vector". there are at least 3 different common understandings of this
word, depending on what field of science or technology you are familiar
with.
physics, math, chemistry(?):
from my time as a math/physics major in college i was familiar with the term
vector in a technical sense as meaning "a magnitude and a direction". or,
symbolically, an arrow, whose size indicates the magnitude of the represented
quantity.
so for the canonical example: john, walking at 5 kilometers per hour is a
speed, but john, walking at 5 kilometers per hour to the northeast is a vector.
programming, computer science:
in programming, it appears that the term vector usually means something like
a re-sizable array. that is, a contiguous sequence of memory locations that
can hold arbitrary values, but which unlike a c language array, can be resized
transparently to allow more (or less) values to be added to the structure after
it’s initial creation.
i believe this terminology was popularized from it’s usage as a data type in
c++. java seems to use the same terminology. it seems to go by the term "array
slice" in go unless i’m getting confused (which is possible).
in this form, it is contrasted with a linked list, which is a (potentially)
non-contiguous group of memory structures that are linked one to another
because each constituent substructure holds the address of the "next"
substructure in the list. typically a linked list can hold arbitrary values,
and new values can be inserted at arbitrary points and at arbitrary times, by
rewriting the memory references on either side of the new data item.
a vector can also be contrasted with an "array" (used here in the c language
sense) which in this analysis is the simplified or degenerate form of a vector
in that an array is contiguous but fixed in form once defined. that is, an
array is defined to hold a certain number and type of elements, and once
defined, the memory is set aside and allocated. however, once defined, one
cannot change the number of elements in an array. instead one must create a new
array with the desired size and then copy the desired elements into the new
array.
under the covers, if you took a snapshot of a vector at a point in time, it
would like like a c array.
update: see
here
for a very good explanation of c arrays vs implementing higher level
language "vectors".
biology, medicine, social sciences(?):
in these fields the term vector refers to something like the idea of a "path".
that is, the route that some item takes to get from one point to another. in
graph terms it is probably something like a directed edge, or perhaps a
sequence of directed edges.
for example, if there is a parasite that moves from birds to humans via the
mechanism of birds pooping on cars, and humans cleaning up the bird poop, then
i believe the poop would be considered the vector. but perhaps if birds
pooped and rats ate the poop and then bit humans to transfer the parasite, the
rats would be the vector. or perhaps the vector would be more technically poop
-> rat -> human. i’m less sure on this last point.
consider the compound term "disease vector" as a similar example.
are there other common definitions of the term "vector" that people know and
use? if so, i’d be interested to hear.
update: see patrick moran’s comment (copied below) for two other uses that are
often assumed in technical documents.
you might also note the use of vector in computer science to mean a small
static sized array that one can act one with simd instructions. the whole
process is known as vectorizing your code, one individual segment of some
(2, 4, 8, maybe more) numbers next to each other is known as a vector.
processors that work with them are known as vector processors.
http://en.wikipedia.org/wiki/vectorization_(parallel_computing)
there is also vector as in vector graphics (as opposed to raster
graphics). this describes image representations like svg that can be thought
of as programmatically drawing the image rather than representing it as a 2d
array of pixels. this use of vector is different from the math/physics
one in that the vectors are arbitrary curves, not necessarily straight lines.
http://en.wikipedia.org/wiki/vector_graphics