just a student just a student - 7 months ago 14
Python Question

numpy how to replace a single element in array1 with whole array2

say I have array1 and it equals

array1=np.zeros((3,3))
that means [[0 0 0]
[0 0 0]
[0 0 0]]


but if I try the following it outputs an error:

array2=np.array[[111,222,333],[444,555,666],[77
array1[1,1]=array2


so how can I replace every single array1 element for a different new array ?
for example

for i in range(3):
for j in range (3):
if i-j==0:
array1[i,j]=array2


so it will become 3*9 instead of 3*3 ?

edit1 :expected output for the example above

[[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],

[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]],

[[251, 123, 584],
[251, 123, 584],
[251, 123, 584]]]

Answer

You cannot change the size (number of elements) of a numpy array. But you could use lists as intermediate step to create that final array:

>>> import numpy as np
>>> array1 = np.zeros((3,3))
>>> array2 = [251,123,584]
>>> np.array([[array2 for _ in row] for row in array1.tolist()])
array([[[251, 123, 584],
        [251, 123, 584],
        [251, 123, 584]],

       [[251, 123, 584],
        [251, 123, 584],
        [251, 123, 584]],

       [[251, 123, 584],
        [251, 123, 584],
        [251, 123, 584]]])

With some intermediate steps:

# Convert the original array to a list
>>> array1.tolist()
[[1.0, 2.0, 3.0], [1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]

# Iterate over all elements and replace the element by array2:
>>> [[array2 for _ in row] for row in array1.tolist()]
[[[251, 123, 584], [251, 123, 584], [251, 123, 584]],
 [[251, 123, 584], [251, 123, 584], [251, 123, 584]],
 [[251, 123, 584], [251, 123, 584], [251, 123, 584]]]

# Convert the list to a numpy array again
>>> np.array([[array2 for _ in row] for row in array1.tolist()])
...