Multi-Dimensional Data (as used in Tensors) - Computerphile

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 159

  • @Akronymus_
    @Akronymus_ 4 роки тому +135

    Glad you mentioned doing the clever things another time.
    Makes me really excited about possible seeing a video on cache optimization, like interlacing the memory and such.

    • @davidm.johnston8994
      @davidm.johnston8994 4 роки тому +2

      Me too! I'd like that

    • @haloid2010
      @haloid2010 4 роки тому +1

      Seconded

    • @kkgt6591
      @kkgt6591 4 роки тому

      Yes

    • @MooseBoys42
      @MooseBoys42 4 роки тому +1

      I'm curious whether "swizzling" as it's called is used in ML. Or if it's just a graphics thing.

    • @brantwedel
      @brantwedel 4 роки тому +1

      @@MooseBoys42 probably both, as ML and graphics have a lot of _parallels_

  • @matwyder4187
    @matwyder4187 4 роки тому +104

    Golden rule is to use powers of 2 as sizes, then you get away with bitwise shifts instead of multiplying. So for a 100x100 dataset, you want to set up a 128x128 grid, then you can address each row by R SHL 7, an instruction done in a single clock cycle, instead of a MUL which afaik takes longer on every platform. You wasted quite a lot of storage, but you gain precious speed.

    • @clehaxze
      @clehaxze 4 роки тому +16

      It's kinda yes and no.
      Shifting is faster than multiplying. But adding paddings make the access pattern more complex leading to more cache misses. Which are far more expensive.
      Also, unless you are JITing or compiling, you need your library containing the optimization and detecting at runtime. Which may not be the case.

    • @danielrose1392
      @danielrose1392 4 роки тому +2

      That is kind of inefficient. Imagine the same done for 5d. Your matrix is suddenly more than 3 times larger.

    • @cameron7374
      @cameron7374 4 роки тому +2

      @cas curse Or if you're writing something that does not need to be optimized. Spending ages trying to optimize some code that'll only be run once every hour or so can be rather pointless.

    • @patrickthepure
      @patrickthepure 4 роки тому +2

      @cas curse As long as your code is not idioticly unoptimal, these kind of optimizations are loss of time. Instead of thinking about the problem at hand, you think about all the itsy bitsy low level trickery to make it, what, 5% faster.

    • @clehaxze
      @clehaxze 4 роки тому +3

      TL;DR If performance is critical (you work in HPC, aviation, automobile, game, etc.. ) You design the performance into your code. You consider the performance implications in the first place. Sometimes even 1% of performance make or breaks stuff in these industries.
      On the other hand, if performance is something you can easily get by scaling out (Web/Mobile App, low volume) or you know your code only takes like 0.1% percent of time in the system anyway (Language Wrappers, Function interfaces, one-off program). You build the thing then maybe optimize it. Then buy more computers.

  • @elwizo
    @elwizo 4 роки тому +155

    Someone get him some brown numberphile paper

  • @Kholaslittlespot1
    @Kholaslittlespot1 4 роки тому +93

    I see Mike; instant like

  • @jaden8611
    @jaden8611 4 роки тому +28

    "We need bigger paper". The whiteboard behind him: "am i a joke to you"

  • @WoodyW2k
    @WoodyW2k 4 роки тому +215

    It’s a shame I can only give this video a one dimensional “like”

    • @cheaterman49
      @cheaterman49 4 роки тому +12

      Zero dimensional boolean, I wish it was a whole dimension :-D

    • @harshthechampful
      @harshthechampful 4 роки тому +7

      Actually it is 2 dimensional as the like button is an image ;)

    • @_adi_dev_
      @_adi_dev_ 4 роки тому

      Whether boolean is its own dimension or not, its a shame you're getting 1 dimensional comments from an n-dimensional language space 😂😂😂

    • @cheaterman49
      @cheaterman49 4 роки тому +1

      @@_adi_dev_ Agreed :-D

  • @sleepy314
    @sleepy314 4 роки тому +3

    APL was a multi-dimensional array language invented by Ken Iverson at IBM research in the early '60s. It was an early interpretive langage, and was extremely useful in doing anything involving arrays. I loved it! of course, I had a math degree and was comfortable with linear algebra etc. I used it to simulate computer architectures, compute project timelines and risks, model animal behvior, and otherwise have a good time! It had its own obscure set of symbols representing array operations, and was affectionately known as "a write only language", which is probably why it did not catch on.

    • @SimonBuchanNz
      @SimonBuchanNz 4 роки тому

      That's the one you needed a special keyboard for, right? That probably didn't help! (Yes, yes, overlays, just learn to touch type ...)

  • @userou-ig1ze
    @userou-ig1ze 4 роки тому +6

    piece of art for editing. THANK YOU

  • @petroniosilva18
    @petroniosilva18 Рік тому

    i was already subscribed of the channel, i am a programming student , i just realized by my self that this was possible, and here i am finding confirmation of my hypothesis.

  • @olamarvin
    @olamarvin 4 роки тому +5

    Dr £ is an excellent explainer of pretty much anything.

  • @ulteriormotif
    @ulteriormotif 4 роки тому +1

    A major advantage arising from keeping everything contiguous in memory is of course cache coherency. This is more significant than the "no need to copy data" explanation given because if were to construct multi-dimensional data from pointers to pointers we would still have that property and also be able to have differing sizes per dimension (jagged arrays). We would however have any lost cache coherency guarantees.

    • @Hexanitrobenzene
      @Hexanitrobenzene 4 роки тому

      "Numerical Recipes" book, from which I studied numerical computing in university, uses arrays of pointers to arrays of pointers...to actual data. I think a few multiplications are a lot better on modern machines, where processors are many times faster than memory...

  • @eatbolt42
    @eatbolt42 4 роки тому +9

    How many people tried to wipe the two dots on the whiteboard (in the medium shot) off their screen only to realize they were part of the image?

  • @mentatphilosopher
    @mentatphilosopher 4 роки тому +7

    You should do a show on the methods used when storing large image sets like for sky surveys and particle physics. Because the files are so large and one only wants to see a portion of the image efficiency of retrieval is needed. Spoiler, the images are stored so that pixels near each other are near each other in memory. I am trying to remember who gave the talk I found got this from. I think it might of been Dr. Mark SubbaRao from the Adler Planetarium or someone from Fermilab. The solution if I remember correctly is to have the offset being the element parameter of a space filling curve.

    • @jensdebruijn6469
      @jensdebruijn6469 4 роки тому

      Cool! This might be useful for something I have been struggling with. If you recall, let me know!

  • @strayling1
    @strayling1 4 роки тому +1

    Fascinating, as always. But when you said storing that bitmap as anything but a 1D array didn't make sense ... now I have an urge to implement 2D storage on a disk drive using track as x and sector as y.
    It's funny that we use row/column addressed hardware which does a transform to make it seem linear for programs which then transform those addresses back into row/column.

  • @ACTlVISION
    @ACTlVISION 4 роки тому +3

    I had a sense of how this might work but never looked under the hood and it didn't really click for me until mike said he visualizes higher dimensional data structures as "groups of groups..." which totally makes sense

  • @Mr.Beauregarde
    @Mr.Beauregarde 4 роки тому +2

    The graphic demonstrating Y stride is wrong. Brady, what number do we start with?, and remember, we're not doing a numberphile video.

  • @johanlarsson9805
    @johanlarsson9805 4 роки тому

    When I was doing stuff like this back in 2010, I too ended up thinking about the deminsions as sets, or groups, of other sets. I never used strides though, Instead I just itterated through the needed parts of the multi dimensional array. In my mind it was the same as spinning through a rubrikscube with many more sides, only checking the appropriate corners for information.
    I guess I was using "tensors" all this time then, since I would say "look at the top left pixel, in the blue layer for the first set of images" by fixing the "set", "layer" and "pixel" and then looping through "images", which is the same as feeding in a bunch a stride commands formed as tensors.

  • @squ94wk
    @squ94wk 4 роки тому +23

    How does this get optimized in relation to cpu cache?

    • @serkanmuhcu1270
      @serkanmuhcu1270 4 роки тому +5

      Wanted to ask this too. I think, that rgb should be the first dimension, since these will most likely be accessed together, so they can be loaded into the same cache line.

    • @yecinemegdiche3202
      @yecinemegdiche3202 4 роки тому +1

      For 100 px by 100 px I think they will be on the same cache line, but I don't think this method scales up for bigger images

    • @SimonBuchanNz
      @SimonBuchanNz 4 роки тому +5

      Tiling, essentially. Put a maximum tile size on each dimension such that the whole tile (or several) fits in cache, then essentially treat tile number as another dimension in this system.

    • @ruroruro
      @ruroruro 4 роки тому +6

      @@serkanmuhcu1270 Although, your intuition is somewhat correct, the real answer is slightly more complicated. NHWC vs NCHW (where N is batch, H and W are width and height and C is channel) is a somewhat controversial question, so most frameworks offer both versions and allow the programmer to choose.
      Even better, many frameworks actually use abstractions, which hide the real layout of data and just measure the actual performance in different configuration and choose the best one before running your code. This is the best approach, since the efficiency of different approaches can depend in complicated, unpredictable ways on the network architecture, hardware used, the size of the data and even what other applications are currently running on the system. There is no "one-layout-fits-all" approach, so it's best to select the best one for each case automatically.

  • @ProfSoft
    @ProfSoft 4 роки тому +1

    Peter parker of image processing ! , thank you spidy :)

  • @BriteRoy
    @BriteRoy Рік тому

    Inteliigent explanation. Where are you from ?

  • @PrivateSi
    @PrivateSi 4 роки тому

    Before watching, I'm going to say array dims aligned to powers of 2 and shifts instead of multiplies. Arranging data so you can work on the last dim in parallel would help lots too.. sparse/ragged arrays for large data sets.. All native screen resolutions should be powers of 2 also... ideally... by law!...
    after watching... ahhh, the basics, but well said. Shifts are 2 to 4 times faster than multiplies and use much fewer Watts.

  • @lophiomys
    @lophiomys 4 роки тому +1

    That is basic practice for every APL / J / K programmer for several decades now. Even with big amounts of data.

  • @DeusGladiorum
    @DeusGladiorum 4 роки тому +3

    Intuitively it sort of makes sense, but in terms of details I don't understand the efficiency gains of one contiguous array vs multiple nested arrays. Using a 2D-array as an example, wouldn't multiplying the y-stride by the x-stride followed by the lookup be just as fast as using constant values to each perform a lookup? Not familiar with the overhead involved in array lookups, I suppose.

    • @jamesrockybullin5250
      @jamesrockybullin5250 4 роки тому +1

      Hopefully you'll get an answer to this. :)

    • @michaelpound9891
      @michaelpound9891 4 роки тому +9

      Great question! There will be some cache lookup benefits to having it all stored together, which is less likely with jagged arrays. Mainly though it comes down to when you're doing block copies and stuff.
      In the case where you're looking up a single pixel, the speed benefit will be negligible. When this approach will really shine is when you say "copy me all the data from dimension 4 indexes 4 to 7", where the whole block is contiguous. In this case there will be the single initial lookup, and then just read the whole thing at once.
      Itll also be a lot easier this way to take "slices" e.g. half of an image, but I didn't really say much on this yet due to time constraints!

    • @Checkedbox
      @Checkedbox 4 роки тому

      Well if you're looping through a 2d array, the most obvious thing to do is a nested for loop, but from that you get extra overhead from loop control. Now if you imagine that scaled up to many dimensions, just have a 1d loop and a 1d array, and you do away with most of that overhead.
      I can't be too sure, as it depends on languages and compiler optimisation, but sometimes the handling of >1D and 1D arrays are different in memory and machine code, and sometimes the same. I think the video is more about my first point, where loop flattening can make a big difference.

    • @kaminutter
      @kaminutter 4 роки тому

      At the lowest level of programming all arrays are long sections of memory. So 2D array as x y is a section of memory which is x*y long. The constants are used to calculate the offsets to get the right value. With more dimensions there are more constants to calculate the offsets. Using constants means that you don't need to calculate fixed values all the time and so is quicker than doing extra maths.

    • @kc9scott
      @kc9scott 4 роки тому +1

      AFAIK he's mostly just talking about how computers, in general, handle multi-dimensional arrays. If you use a higher-level language to work with multi-dimensional arrays, this is what the compiler/interpreter will be doing behind the scenes, to make it appear to be a multi-dimensional array. However, there are some occasions where the programmer may be forced to do these sorts of things explicitly.

  • @EvertBorghgraef
    @EvertBorghgraef 4 роки тому +13

    WHY CAN'T I HOLD ALL THESE DIMENSIONS? 😱

  • @tristunalekzander5608
    @tristunalekzander5608 4 роки тому

    This video was so relevant to me. I'm just learning c++ and this is like definitely the best way to make multi dimensional arrays.

  • @martinh2783
    @martinh2783 4 роки тому +2

    At 6:15, don't you mean you need more dimensions on you paper?

  • @ezedjay
    @ezedjay 4 роки тому +1

    Takes me right back to my last year in Comp Sci. I used many techniques like this and vectorized loops etc. to build a 3-d laser scanner and associated reconstruction software. Then I left University and never made use of my degree at all........I wish I'd just stayed in the University to be honest - but oh no - get out into the real world I was told.......why do I listen to other peoples advice?

    • @Hexanitrobenzene
      @Hexanitrobenzene 4 роки тому +2

      I think you could go back to university. Doing things you don't like will make you bitter in the long run...

  • @apenasmeucanal5984
    @apenasmeucanal5984 4 роки тому

    wouldn’t it be more efficient to store all channels of an image in a, for example, int array and then use bitwise AND to get the individual color information from those ints instead of having one char array for each one?

  • @7177YT
    @7177YT 4 роки тому

    Thank you! Pls. more!

  • @nicolasdiodati3459
    @nicolasdiodati3459 9 місяців тому

    But you are thinking in pixels instead of voxels. Assign colors to axis instead of levels.
    I did some work on this leading to a 13th dimensional, multi-base computer.
    Project oracle the computer that imitates reality.

  • @GrumpyOldMan9
    @GrumpyOldMan9 Рік тому

    What is an "awway"?

  • @RickeyBowers
    @RickeyBowers 4 роки тому +1

    Every number could be imagined as existing in the dimensionality of its digits. The stride would be the power of the base for the unit place. We've been using multiple dimensions all along.

  • @murtazanasir
    @murtazanasir 4 роки тому +1

    How does sparse data get stored and accessed?

  • @zbeekerm
    @zbeekerm 4 роки тому +3

    When is Nottingham going to run out of that 1980s printer paper?

    • @mikejohnstonbob935
      @mikejohnstonbob935 4 роки тому +5

      the second video on multi-dimensional data

    • @josephcote6120
      @josephcote6120 4 роки тому

      I've still got three cases of blue-bar paper in my garage.

  • @JmanNo42
    @JmanNo42 4 роки тому +1

    That does not seem that dynamic to me, how would you go on store for example words ? Would you reallly go on allocate space for the possible characters at each new instance, and how to tell a word is ending would not something like a file allocation table be more efficient. Or maybe an algorith of ones own, that search thru a tree, or do you say it would be to slow?
    I mean chess moves could be stored in a folder structure, now there is depth restrictions, but one could possibly come up with something that basically alllow you to store a datastructure of a few terrabytes, and with unlimited depth to store any kind of forked data structures?
    Isn't that basicly how alpha zero works?

    • @JmanNo42
      @JmanNo42 4 роки тому

      Well for chess you would need two structures one where white is winning and one where black is winning

    • @JmanNo42
      @JmanNo42 4 роки тому

      And then it is basicly just about set up the rules for the game and let it play, as i understand it alpha zero have no idea of the value of pieces to start with? At some point you remove futile paths "moves" for the players.
      Probably you do not let it play all moves from beginning, just 10 and then evaluate the positions. Next you play 20, 30 and so on until a full game played thru. Next you revise structure by play 5,,15,25 before evaluation and see if other patterns have emerged in evaluation.

    • @kkgt6591
      @kkgt6591 4 роки тому

      @@JmanNo42 No an expert in AI, are you saying that all possible moves are coded in an conventional chess program? Whereas alpha does that dynamically?

    • @JmanNo42
      @JmanNo42 4 роки тому

      @@kkgt6591 Well i do not know i assumed that alphago wrote to file dynamically, not allocated all possible positions for each move, i mean that would not be much depth/dimensions of such a tree?

    • @JmanNo42
      @JmanNo42 4 роки тому

      My understanding of chessprogram is that they do not store that much except for in memory, maybe 5 and six moves and evaluate constantly?
      And then they have the opening book stored, whille i thought that alpha go stores succesful "winning" games. And then cut of branches that do not look successful. And that they hare stored in a "linear" searchable tree/file. structure much like a file allocation table.

  • @TheSpacecraftX
    @TheSpacecraftX 4 роки тому

    kinda weird to call matrices tensors. Where does that come from?

    • @quangtung2912
      @quangtung2912 4 роки тому

      Real mathematicians dont call multidimensional arrays as tensors

  • @davidm.johnston8994
    @davidm.johnston8994 4 роки тому

    Great video, thanks!

  • @Rexeh1
    @Rexeh1 4 роки тому +1

    Good on ya Mike

  • @Einhamer
    @Einhamer 4 роки тому

    I have just started my way on image processing, and the way I figured it is to use a "pixel structure" that stores the RGB values of each pixel, so I just had to use a 2D array to store every pixel, making my life a little bit simple... so, can someone tell me wich one is the best way to represent the image?, am I wasting memory/speed?, what could I do to improve on that?

    • @TheScarletKing
      @TheScarletKing 4 роки тому +2

      The number of elements is still the same; the way you address the data doesn not magically change the amount of data. The only place you'd possibly see a difference in speed is in the complexity of the operations you use to address specific pixels, which only really becomes a concern on a per-language basis. Fortran for instance still sees use today thanks to its array-handling features.
      As far as image-processing goes, I know OpenCV stores image data in the way you've described it by default - an MxN matrix of arrays of length 3 that each represent a pixel, so I personally don't see much benefit in deviating from it since its library functions are designed around it. It's better to look into the specifics of the language and library you're using to get a better idea about what practices you should be inculcating.
      I'm not expert on the subject, mind you. I just started image-processing and CUDA last month so that's all I really feel confident in saying. Cheers!

  • @qwerty975311
    @qwerty975311 4 роки тому +1

    Dr Mike pound!!

  • @surelynottrue3894
    @surelynottrue3894 4 роки тому

    I wonder if I could mail him a question and we could have a conversation on it

  • @holdenmcgroin8917
    @holdenmcgroin8917 4 роки тому

    Better seeing this from algorithm and data structure point of view

  • @JA-sv9ct
    @JA-sv9ct 3 роки тому

    too tired to understand anything but I'll come back i recon

  • @billykotsos4642
    @billykotsos4642 4 роки тому +1

    Good stuff

  • @woowooNeedsFaith
    @woowooNeedsFaith 4 роки тому

    I would like to know computational cost of convolution (on the context of convolutional NN).

    • @riccardoorlando2262
      @riccardoorlando2262 4 роки тому

      On a two dimensional array, like an image, it is O(image pixel count x convolution brush pixel count) in general.

    • @woowooNeedsFaith
      @woowooNeedsFaith 4 роки тому

      @Riccardo Orlando
      That is complexity of trivial algorithm, but I would like to know more about the lower bound.

    • @KohuGaly
      @KohuGaly 4 роки тому

      @@woowooNeedsFaith From what I can tell, lower bound is n*log(n). At least that's the limit for linear convolution, because it can be implemented as multiplication in frequency domain ( O(n) ) and conversions from and to frequency domain can be done via FFT. FFT is O(n*log(n)) and is proven to be the fastest possible way to do it.

  • @Mikey-mike
    @Mikey-mike 4 роки тому

    Good one.

  • @geonerd
    @geonerd 4 роки тому +2

    "Nifty" Are you even allowed to say that 'over there?' ;)

  • @sleepingbee101
    @sleepingbee101 Рік тому +1

    Pure gibberish what was he talking about, that man needed a script or something.

  • @danieljensen2626
    @danieljensen2626 4 роки тому

    See also: why it's stupid and crazy that MATLAB let's you dynamically change the size of multi-dimensional arrays.

    • @riccardoorlando2262
      @riccardoorlando2262 4 роки тому

      Well, to be fair, it gives a warning whenever you do that.

  • @simplelife861
    @simplelife861 4 роки тому

    Very Nice

  • @hi_im_buggy
    @hi_im_buggy 4 роки тому +3

    Why don't they use the whiteboard right behing him instead of wasting paper??

    • @Dan-gs3kg
      @Dan-gs3kg 4 роки тому

      Growing new trees reduces carbon more than keeping trees alive. Uses less water, too.

  • @AgentM124
    @AgentM124 4 роки тому +1

    Yess!!!

  • @555Devil555
    @555Devil555 4 роки тому +4

    More paper ?
    You have a huge whiteboard right behind you.
    More ecological too :p

    • @the_berzi
      @the_berzi 4 роки тому +2

      Computerphile paper is all left over from years ago so any impact on the environment has already been done, might as well use it.
      Some even say the very reason this channel exists is so that they can get rid of all that paper...

    • @555Devil555
      @555Devil555 4 роки тому

      brzrkr still would have prefered if in some cases they would use the whiteboard, like more complex ones like this video.

    • @the_berzi
      @the_berzi 4 роки тому

      @@555Devil555 Yeah I agree. Sometimes extra space is needed.

  • @BeCurieUs
    @BeCurieUs 4 роки тому

    And now we understand why languages that don't have linearly places array memory die a timely death when dealing with large arrays :D

    • @BeCurieUs
      @BeCurieUs 4 роки тому

      @MichaelKingsfordGray Guess it depends on the implementation? I know for Javascript everything in an array is really just an object that is hashed, making for easy access to elements and potential savings on memory for sparse arrays at the sacrificed of speed...quite a bit of speed. I know more mathy libraries exist for things like python, but they are beyond my knowledge!

  • @jonathanjacobson7012
    @jonathanjacobson7012 4 роки тому +2

    Paper overflow!

  • @vcokltfre
    @vcokltfre 4 роки тому +2

    I think TensorFlow hates me...

    • @kadblue2000
      @kadblue2000 4 роки тому +4

      Try pytorch. Its the way to go now

  • @user-zu1ix3yq2w
    @user-zu1ix3yq2w 4 роки тому

    Geez, I think this could've been made clearer. What's a channel? What does the data look like in memory, or what would it look like on a straight line?

  • @manfredbogner9799
    @manfredbogner9799 27 днів тому

    Sehr gut

  • @StefanReich
    @StefanReich 4 роки тому +6

    Was there any information in this video? I was waiting for any sort of trick or something

    • @Mr.Beauregarde
      @Mr.Beauregarde 4 роки тому +1

      It was a pop quiz to see if you recognized inaccurate graphical explanations. I guess you didnt. Fortunately, actual ability and ability to condescend are inversely proportional

    • @Mr.Beauregarde
      @Mr.Beauregarde 4 роки тому

      @MichaelKingsfordGray Lecture, go on. At worst I chastened, rather more an admonishment.
      And what sort of android-pretending-to-be-human-phrase is "real adult name "? I'm legitimately concerned you might be having a stroke right now.

    • @theyaoster
      @theyaoster 4 роки тому

      @@Mr.Beauregarde "...rather more an astonishment."
      "I'm legitimately concerned you might be having a stroke right now."

    • @Mr.Beauregarde
      @Mr.Beauregarde 4 роки тому

      @@theyaoster I'm astonished you'd admonish what's so clearly a #dyac moment.

  • @PopeGoliath
    @PopeGoliath 4 роки тому +4

    I'm finally getting around to pronouncing Euler as "Oiler", but NumPy is still "Numb-pee" to me.

  • @simplelife861
    @simplelife861 4 роки тому

    awesome

  • @KappaHakka
    @KappaHakka 4 роки тому +2

    Wait am I missing something? Isn't this what is explained in a basic C course?

  • @5ty717
    @5ty717 Рік тому +1

    Well sorry i bothered… very confusing output of such a simple process… He is childish in his organizational ability… waste of time

  • @mehmetdemir-lf2vm
    @mehmetdemir-lf2vm 4 роки тому +1

    unnecessarily redundant way of teaching. in 10 minutes you could also talk about ways of storing values in scarce tensors (like hashing dimension indexes etc.).

  • @seal0118
    @seal0118 4 роки тому

    what

  • @TheFakeVIP
    @TheFakeVIP 4 роки тому

    y×width+x
    Javidx9 anyone?

    • @Akronymus_
      @Akronymus_ 4 роки тому

      It is very much NOT just javid. Altough, he is an amazing programmer.

    • @TheFakeVIP
      @TheFakeVIP 4 роки тому

      Zero Cool Fully understood and agreed, I just like using these little connections to toss the names of people I like in the comments so others will hopefully see them and go subscribe.

  • @habdochkeineahnung
    @habdochkeineahnung 4 роки тому

    Mike, you need to get some deep! Im worried about you.

  • @scottmacs
    @scottmacs 4 роки тому

    It all goes back to that infinite length of tape.

  • @SuperChooser123
    @SuperChooser123 4 роки тому

    I feel like this video could have been a minute long. Like I get it, it works just as well for more than 2 or 3 dimensions

  • @electromorphous
    @electromorphous 4 роки тому +3

    Last time i was this early...
    JK I was never this early 😂

  • @aayushsoni2296
    @aayushsoni2296 4 роки тому

    💯

  • @jacesullivan4563
    @jacesullivan4563 4 роки тому

    You're using paper and run out of room.... Why not use the marker board to your left?... Save the paper for something worth the tree. 😁

  • @marcinpohl3264
    @marcinpohl3264 4 роки тому +3

    That's not tensors, that's just basic pointer arithmetic, c'mon, up the voltage!

  • @dipi71
    @dipi71 4 роки тому +1

    Oddly elementary, this one.

  • @3sc4p1sm
    @3sc4p1sm 4 роки тому +1

    When I watch numberphile I hear lots of new interesting stuff. When I watch comouterphile it is always 100% something I knew/learned as a teenager... dissapointing

  • @mohammedmohammed519
    @mohammedmohammed519 4 роки тому +2

    Who is from /g/ or /tech/?

  • @OnlyHerculean
    @OnlyHerculean 4 роки тому +1

    Nearly first

  • @manfredbogner9799
    @manfredbogner9799 27 днів тому

    Sehr gut