首先将一个二维数组其中一列有异常大值的列取出来,经过处理后该列异常值已经替换,现在想把处理后的单列替换原数组中对应的列,没有成功,不知为什么?
原来有异常值的列没有被替换
log_num2 = np.array(log_num2) #其实log_num2已经是一个array, log_num2已经处理过,检查确认
log[::,num2] = log_num2 # 使用log_num2替换原数组中num2列,num2也检查数值正确。
运行后原数组中对应的列没有被替换
使用处理后的列替换原来的列
目标是将处理后的列(一个单列array文件)替换原二维数组中对应的列。
望采纳!!!
我看见你使用了 NumPy 的切片功能来对 log 数组的第 num2 列进行赋值。但是,这样的赋值方式可能会导致 log 数组的形状发生改变
为了避免这种情况,你可以使用 NumPy 的 take 函数来获取 log 数组的第 num2 列,然后使用 put 函数将 log_num2 中的值赋值到 log 数组的第 num2 列。
col = np.take(log, num2, axis=1)
np.put(col, np.arange(col.size), log_num2)
我猜测原因可能是这样的:
你使用的是切片赋值的方式,即 log[::num2] = log_num2,但是这种方式是将log_num2整个作为一个元素插入到log数组的num2列的第一个位置,而不是将log_num2中的每一个元素插入到log数组的num2列中。
举个例子,如果你有一个三行两列的数组 log,并有一个单列数组 log_num2,那么使用 log[::num2] = log_num2 后,log数组可能会变成这样:
[[0, log_num2], [0, log_num2], [0, log_num2]]
所以你可以尝试使用循环遍历的方式替换数组中的元素,例如:
for i in range(log.shape[0]):
log[i][num2] = log_num2[i]
这样就可以将log_num2中的每一个元素插入到log数组的num2列中。
如果你想要替换数组中所有的列,那么可以将num2改为:,例如:
log[:, :] = log_num2
这样就可以将log_num2整个数组替换到log数组的所有位置。
可以将完整的代码上传一下吗?
二维数组的替换方式, 代码如下(测试数据):
import numpy as np
log = np.array([[1, 1, 1],
[11, 11, 11]])
log_num2 = np.array([[1, 1, 1]])
print("log:")
print(log)
print("log_num2:")
print(log_num2)
# 替换 1:2 表示二维数组从上往下从1开始数取1列, 0:3 表示二维数组从左往右从0开始取3列 log[1:2, 0:3] 表示 [[11 11 11]]
log[1:2, 0:3] = log_num2
# 输出结果
print("result: ")
print(log)
打印结果:
log:
[[ 1 1 1]
[11 11 11]]
log_num2:
[[1 1 1]]
result:
[[1 1 1]
[1 1 1]]
Process finished with exit code 0