如何遍历numpy数组单个元素并提取其最后10个字符?
解决方法
你的问题出在数组结构上:这个(100,1)的numpy数组是二维object类型数组,每个位置的元素本身是一个长度为1的子数组,真正的目标字符串存在这个子数组里。所以直接用arr[0][-10:]是对一维子数组做切片,而非对字符串操作,自然返回整个元素。
下面是几种可行的处理方式:
方式1:先扁平化数组再遍历
把二维数组转成一维的字符串数组,之后直接遍历每个字符串取最后10位:
import numpy as np # 模拟你的数组结构 arr = np.array([['37107287533902102798797998220837590246510135740250']]*100, dtype=object) # 扁平化数组,得到一维字符串数组 flat_arr = arr.flatten() # 遍历处理每个元素 for s in flat_arr: last_10_chars = s[-10:] # 这里替换成你需要的业务操作,比如存储结果 print(last_10_chars)
方式2:直接遍历二维数组的行
因为数组是(100,1)结构,每一行就是一个长度为1的子数组,取行内第一个元素就能拿到字符串:
for row in arr: # 取出子数组里的目标字符串 target_str = row[0] last_10_chars = target_str[-10:] print(last_10_chars)
方式3:向量化批量处理(无需循环)
用numpy的vectorize函数对整个数组做批量处理,一步得到所有结果:
# 批量生成所有元素的最后10位,结果仍为(100,1)的数组 result_arr = np.vectorize(lambda x: x[-10:])(arr)
单个元素的正确测试方式
如果你想单独验证第一个元素,应该用:
arr[0][0][-10:]
先通过arr[0][0]拿到字符串,再做切片,就能得到目标的最后10个字符。
内容的提问来源于stack exchange,提问作者Vick
相关产品推荐
相关产品推荐

