Python 将ndarray的整个列维度替换为另一个长度相同的数组
我有python中的5d ndarray,定义如下Python 将ndarray的整个列维度替换为另一个长度相同的数组,python,arrays,numpy,Python,Arrays,Numpy,我有python中的5d ndarray,定义如下 RGBXY = [ [1,2,3,4,5], [6,7,8,9,10], #...100 more times [101,102,103,104,105], ] 我还有一个数组定义为 x = [0,0.3,0.4,0.6,0.8,0.9...] #length same as RGBXY subarrays 我想用x中的值替换第4列 所以,如果我想用一个数字来代替它们,我会这么做 RGBXY[:,3:4]
RGBXY = [
[1,2,3,4,5],
[6,7,8,9,10],
#...100 more times
[101,102,103,104,105],
]
我还有一个数组定义为
x = [0,0.3,0.4,0.6,0.8,0.9...] #length same as RGBXY subarrays
我想用x中的值替换第4列
所以,如果我想用一个数字来代替它们,我会这么做
RGBXY[:,3:4] = 5
如何用x中的数组替换第4列?使用np有一种很好的方法,我不知道。前提是阵列的长度相同
RGBXY[:,3] = x
你可以用它来做
for i in range(len(RGBXY)): # For 0 - length of RGBXY array(number of elements in RGBXY)
RGBXY[i][3] = x[i] # Assign the 4th(for loops counts from 0) column in the array to x at the same index.
如果这些是numpy数组(或者您可以使用numpy),那么您应该能够按照如下方式直接分配它,假设RGBXY中的所有列表长度相同:
RGBXY=np.array([
[1,2,3,4,5],
[6,7,8,9,10],
[101,102,103,104,105],
],dtype=float)
x=[0,0.3,0.4]
RGBXY[:,3]=x
然后,RGBXY的值为:
array([[ 1. , 2. , 3. , 0. , 5. ],
[ 6. , 7. , 8. , 0.3, 10. ],
[101. , 102. , 103. , 0.4, 105. ]])
注意,我必须将数组的数据类型指定为上面的float,因为所有原始值都是整数,但新的x值都是float。如果没有这一点,它将把所有的x值转换为int(在本例中为零)。Im get:indexer错误:索引100超出了大小为100的轴0的范围。您说的是相同长度的数组在哪里?是吗?是的,他们应该是。但这个错误表明它们的长度不同,对吗?我想是的。这应该迭代RGBXY中的每个元素,并将RGBXY[i]中的第四个元素设置为x[i]或xFriendly中的第n个元素注意:此过程不需要迭代,严格来说,由于其效率低下,“不鼓励”(如果愿意的话)。广播是一种方式。你的意思是:
RGBXY[:,3]=x
?这将用定义为x
的数组替换第四列(索引3)。这是一个有5列的2D数组,而不是5D数组