You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在NumPy矩阵中拼接字符串会出现截断现象?

字符串截断问题的原因与解决办法

问题原因

  1. numpy字符串数组的固定长度限制:你创建的part1Vertices是numpy矩阵,默认会根据初始元素的长度自动设置字符串 dtype(比如初始元素"(a)"长度为3,dtype就是U3)。当你用np.char.add拼接更长的字符串时,结果会被强制截断到这个固定长度,这就是输出只显示前3个字符的核心原因。
  2. 代码逻辑错误:代码中引用了未定义的aList和j,且没有正确将拼接结果赋值给part1Vertices,这部分逻辑完全失效,导致你看到的输出并非正确的拼接结果。

解决办法

方案1:修改numpy矩阵的字符串类型为可变长度

在创建矩阵时,指定足够容纳目标表达式的字符串 dtype(比如U100),同时修正赋值逻辑:

import numpy as np

# 创建矩阵时显式指定长字符串类型
matrixA = np.matrix([
    ['(1)', '(1/b)'],
    ['(-1/b)', '(1/b)']
], dtype='U100')

part1Vertices = np.matrix([
    ['(a)', '(a)'],
    ['(a)', '(-a)'],
    ['(-a)', '(-a)'],
    ['(-a)', '(a)'],
    ['(a)', '(a)']
], dtype='U100')

print("Part 1 Original: ")
print(part1Vertices)

# 新建矩阵存储结果,避免原矩阵长度限制影响
updated_vertices = np.empty_like(part1Vertices, dtype='U100')

for i in range(len(part1Vertices)):
    # 按矩阵乘法逻辑拼接字符串
    col1 = f"{matrixA[0,0]}*{part1Vertices[i,0]}+{matrixA[0,1]}*{part1Vertices[i,1]}"
    col2 = f"{matrixA[1,0]}*{part1Vertices[i,0]}+{matrixA[1,1]}*{part1Vertices[i,1]}"
    updated_vertices[i, 0] = col1
    updated_vertices[i, 1] = col2

print("\nPart 1 Updated: ")
print(updated_vertices)

方案2:改用Python原生列表处理

如果不需要numpy的矩阵运算特性,直接用Python原生列表更灵活,完全没有字符串长度限制:

matrixA = [
    ['(1)', '(1/b)'],
    ['(-1/b)', '(1/b)']
]

part1Vertices = [
    ['(a)', '(a)'],
    ['(a)', '(-a)'],
    ['(-a)', '(-a)'],
    ['(-a)', '(a)'],
    ['(a)', '(a)']
]

print("Part 1 Original: ")
for row in part1Vertices:
    print(row)

updated_vertices = []
for x, y in part1Vertices:
    col1 = f"{matrixA[0][0]}*{x}+{matrixA[0][1]}*{y}"
    col2 = f"{matrixA[1][0]}*{x}+{matrixA[1][1]}*{y}"
    updated_vertices.append([col1, col2])

print("\nPart 1 Updated: ")
for row in updated_vertices:
    print(row)

预期输出

两种方案均可输出你需要的结果:

Part 1 Original: 
[['(a)' '(a)']
 ['(a)' '(-a)']
 ['(-a)' '(-a)']
 ['(-a)' '(a)']
 ['(a)' '(a)']]

Part 1 Updated: 
[['(1)*(a)+(1/b)*(a)' '(-1/b)*(a)+(1/b)*(a)']
 ['(1)*(a)+(1/b)*(-a)' '(-1/b)*(a)+(1/b)*(-a)']
 ['(1)*(-a)+(1/b)*(-a)' '(-1/b)*(-a)+(1/b)*(-a)']
 ['(1)*(-a)+(1/b)*(a)' '(-1/b)*(-a)+(1/b)*(a)']
 ['(1)*(a)+(1/b)*(a)' '(-1/b)*(a)+(1/b)*(a)']]

内容的提问来源于stack exchange,提问作者Samuel W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:27:24