python - 函数 numpy.apply_along_axis 意外结果
问题描述
我想编写一个函数来将 2D numpy 数组转换为 Mathematica 矩阵语法。但是,我发现了numpy.apply_along_axis函数的一些意外行为。
这是一段代码来显示这种奇怪的行为
import numpy as np
A=np.array([[-5,6,-7,6,0],[-5,-3,-9,-1,0],[1,-4,0,-4,-4],[4,0,-3,-4,3]])
func=lambda x: '{' + ','.join(x) + '}'
A=A.astype(str)
print(np.apply_along_axis(func,1,A))
print([func(row) for row in A])
输出:
['{-5,6,-7,6,0}' '{-5,-3,-9,-1,' '{1,-4,0,-4,-4' '{4,0,-3,-4,3}']
['{-5,6,-7,6,0}', '{-5,-3,-9,-1,0}', '{1,-4,0,-4,-4}', '{4,0,-3,-4,3}']
似乎该函数func
未正确应用于 array 的第 1 行和第 2 行A
。
Python version: 3.6.9
OS: Ubuntu Linux 18.04.4 LTS
Numpy version: 1.13.3
解决方案
这似乎与输出数组的类型(字符串)有关。将您的第一个输出转换为字符串后,numpy
似乎根据第一个字符串的长度定义其类型:<U13
. 所有后续输出都以该长度截断。测试如下:
In [20]: b = np.apply_along_axis(func,1,A)
In [21]: b
Out[21]:
array(['{-5,6,-7,6,0}', '{-5,-3,-9,-1,', '{1,-4,0,-4,-4', '{4,0,-3,-4,3}'],
dtype='<U13')
正如您在问题中已经指出的那样,有一些方法可以在不使用np.apply_along_axis
. 例如,继续您的方法,您可以说:
output = [func(x) for x in A]
对于 2D numpy 数组,该in
操作一次返回一行,因此您的输出将是一个字符串列表:
['{-5,6,-7,6,0}', '{-5,-3,-9,-1,0}', '{1,-4,0,-4,-4}', '{4,0,-3,-4,3}']
推荐阅读
- html - Aria-label 在带有 NVDA 的 Chrome 和 Firefox 中不起作用
- python - 为树中的每个节点生成 ID
- c# - 创建依赖于 netstandard 包的 netcore 3.0 项目的 NuGet 包
- spring-boot - openapi 3.0 中所有 API 的强制标头
- javascript - ReactJs 道具在 componentDidMount 中返回未定义
- ios - 如何在 Xcode 项目中使用 C 库?
- image - 在 SwiftUI 中使用 PencilKit 将绘图转换为图像
- sas - 比较 SAS 中不同版本的 PDF 文档
- java - 使用 @Query 调用存储过程会导致异常:调用 ProcedureName 时参数的数量或类型错误
- return - 中断 LPC 微控制器上的寄存器写操作