日期: 2021 年 4 月 13 日

iOS开发苹果支持中文字体,和使用字体

1.中文字体

转自:https://zhidao.baidu.com/question/1239016138772367339.html

ios7英文字体:Helvetica 下的各种系统,例如Helvetica Neue等,细究起来很烦,不同的地方用不同的系统,但都是Helvetica家族下的
ios7中文字体:STHeitiSC-Light 黑体-简

2.苹果使用字体
转自:http://blog.csdn.net/onlyou930/article/details/7422097
label.font  =  [UIFont fontWithName: @” Arial-BoldItalicMT ”  size: 24 ];

字体名如下:

Font Family: American Typewriter
Font: AmericanTypewriter
Font: AmericanTypewriter-Bold

Font Family: AppleGothic
Font: AppleGothic

Font Family: Arial
Font: ArialMT
Font: Arial-BoldMT
Font: Arial-BoldItalicMT
Font: Arial-ItalicMT

Font Family: Arial Rounded MT Bold
Font: ArialRoundedMTBold

Font Family: Arial Unicode MS
Font: ArialUnicodeMS

Font Family: Courier
Font: Courier
Font: Courier-BoldOblique
Font: Courier-Oblique
Font: Courier-Bold

Font Family: Courier New
Font: CourierNewPS-BoldMT
Font: CourierNewPS-ItalicMT
Font: CourierNewPS-BoldItalicMT
Font: CourierNewPSMT

Font Family: DB LCD Temp
Font: DBLCDTempBlack

Font Family: Georgia
Font: Georgia-Bold
Font: Georgia
Font: Georgia-BoldItalic
Font: Georgia-Italic

Font Family: Helvetica
Font: Helvetica-Oblique
Font: Helvetica-BoldOblique
Font: Helvetica
Font: Helvetica-Bold

Font Family: Helvetica Neue
Font: HelveticaNeue
Font: HelveticaNeue-Bold

Font Family: Hiragino Kaku Gothic **** W3
Font: HiraKakuProN-W3

Font Family: Hiragino Kaku Gothic **** W6
Font: HiraKakuProN-W6

Font Family: Marker Felt
Font: MarkerFelt-Thin

Font Family: STHeiti J
Font: STHeitiJ-Medium
Font: STHeitiJ-Light

Font Family: STHeiti K
Font: STHeitiK-Medium
Font: STHeitiK-Light

Font Family: STHeiti SC
Font: STHeitiSC-Medium
Font: STHeitiSC-Light

Font Family: STHeiti TC
Font: STHeitiTC-Light
Font: STHeitiTC-Medium

Font Family: Times New Roman
Font: TimesNewRomanPSMT
Font: TimesNewRomanPS-BoldMT
Font: TimesNewRomanPS-BoldItalicMT
Font: TimesNewRomanPS-ItalicMT

Font Family: Trebuchet MS
Font: TrebuchetMS-Italic
Font: TrebuchetMS
Font: Trebuchet-BoldItalic
Font: TrebuchetMS-Bold

Font Family: Verdana
Font: Verdana-Bold
Font: Verdana-BoldItalic
Font: Verdana
Font: Verdana-Italic

Font Family: Zapfino
Font: Zapfino

UIFont fontWithName 后不知道字体的名字,看了下面的全解决!

%title插图%num


3.打印字体族,和字体名字
转自:http://www.2cto.com/kf/201505/397306.html

ios的提供了很多的字体样式。有时候我们在开发应用的时候可能用到不同的字体,通过此Demo我们可以获取到所有的字体样式供我们选择。 首先获取字体字体族科名字,再通过族科的名字获取到字体的名字。

    NSArray *arr  = [UIFont familyNames];

    for (NSString *str in arr) {

        NSArray *at = [UIFont fontNamesForFamilyName:str];

        for (NSString *fffff in at) {

            NSLog(@”字体名字 %@”,fffff);

        }

    }

然后再使用如下代码就可以修改字符串的字体 。


//    NSString * testStr  = @我随手一打就是漂亮的十五个字了;

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:testStr];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,3)];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(3,4)];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(7,4)];

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:_fontArray[indexPath.row] size:30] range:NSMakeRange(0, 15)];

 
?显示中文和英文的效果不是很一致,英文的效果明显一些,如下是部分效果截图。具体在Demo里面有。
\

\

 

\

iOS 修改系统定位(非越狱)

修改系统定位其实是不太可能的(除非越狱)。那么我们今天就通过一个简单方式来修改系统的定位,当然是有一定的限制的。

首先:我们先创建一个项目,名字随意。然后一个文件LocationPosition.gpx如下:

%title插图%num

%title插图%num

然后打开这个LocationPosition.gpx文件如下:

<?xml version=”1.0″?>
<gpx version=”1.1″ creator=”Xcode”>

<!–
Provide one or more waypoints containing a latitude/longitude pair. If you provide one
waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
Xcode will simulate a route visiting each waypoint.
–>
<wpt lat=”39.89606702936854″ lon=”116.36890332416854″>

<name>Cupertino</name>

<!–
Optionally provide a time element for each waypoint. Xcode will interpolate movement
at a rate of speed based on the time elapsed between each waypoint. If you do not provide
a time element, then Xcode will use a fixed rate of speed.

Waypoints must be sorted by time in ascending order.
–>
<time>2014-09-24T14:55:37Z</time>
</wpt>

</gpx>
直接修改<wpt lat=”39.89606702936854″ lon=”116.36890332416854″>其中: lat是纬度,lon是经度,然后保存即可,当然也可以添加多个。

*后一步: Product->Scheme->Edit Scheme->Run->Options->Core Location->Default Location 选择:LocationPostion 如下图:

%title插图%num

然后运行XCode到真机上,即可以实现系统定位了。

这样有个问题就是,如果我们stop了XCode发现就不管用了,那么怎么解决呢。

这个可以在运行后直接拔掉链接线。那么就可以无忧的实现系统定位了。好了如果还有什么问题可以自己努力了。

iOS系统回退教程

如果你升级了系统之后觉得体验不好或者不习惯怎么办呢?这篇教程就教你回退iOS系统,也就是降级。
1.首先下载iOS固件,访问苹果官方固件下载网站,你会看到4个步骤,分别是:
Choose a product
Choose a platform
Choose a version
Download!
你只需要按照这4个步骤来选择适用你手机的固件,
选择你的产品类型,点击iPhone;

选择手机型号,Global是全网通版本,GSM是移动/联通版本,请确认自己手机的版本,千万不要选错了;

选择固件版本,Signed IPSWs下面的绿色列表是你可以选择的iOS版本,也就是说,这些版本的官方验证通道还没有关闭,是可以正常使用的,选择其中的一个你需要的版本,点击进入下载页面。如果绿色列表中没有你要的版本,说明你要的版本已不支持回退,本文以下内容可以不用再看了;

点击Download按钮下载即可,下载的文件是一个后缀为.ipsw的文件。

2.下载windows PC版本的iTunes(Microsoft下载,点击【获取】按钮即可安装;也可以从Apple官网下载)。
3.安装好iTunes后打开,并将手机通过USB数据线(*好用原装数据线)连接到你的电脑,iTunes检测到后会连接到你的手机,手机上会有弹窗,点击信任即可,连接好后,iTunes左上角会有一个手机的图标出现,点击手机图标(也可能会自动打开与手机相关的页面)打开手机相关页面。
4.数据备份,升级一般数据不会丢失,降级则数据会丢失(这种情况下一定要数据备份),但是为了数据安全性,建议无论是升级还是降级都先备份数据,备份的方式有两种:通过iCloud或者iTunes备份,这里我们选择通过iTunes手动备份(速度快,存储在电脑上),因为只有手动备份才能修改7中说的版本号,备份完毕后再执行下一步操作。
5.升/降级前在设置-顶部头像-iCloud-查找我的iPhone中点击关闭。如果你下载的固件版本低于当前版本选择【恢复iPhone】,如果高于当前版本,则选择【检查更新】,注意点击前先按住【Shift】按键(Mac电脑按住【ALT】按键),然后在弹窗中选择你之前下载好的固件(ipsw文件),然后就是较长一段时间的等待咯。切记中途不要插拔USB数据线。
6.系统升/降级完成后(正常情况下是这样,也有可能中途会报错失败,那样的话你得执行恢复操作,iTunes会有相应的操作提示,也就是还原你之前的系统),下一步就是数据的还原了,升级的话一般数据都还在,降级的话这一步是必须的(降级后相当于拿到了一部新手机,指纹都得重新录入,操作步骤就不说了,其中会提示数据恢复,可以先跳过),降级后的数据恢复请先阅读下面的第7点,现在之前备份的数据就派上用场了,iTunes里面有一个数据恢复,选择你之前备份的数据恢复即可。
7.但是降级后有一个问题就是有可能你之前在高版本系统上备份的数据不能用于低版本的数据恢复,解决办法就是找到你电脑上iTunes的备份目录,我的是在C:\Users\用户名\Apple\MobileSync\Backup下,有一个名字是字母数字混合且很长的文件夹,这就是你备份的数据,打开它,里面有一个文件叫Info.plist,编辑它,修改Product Version下面的版本号,比如你回退的版本号是12.4.1, 注意不要有空格,然后保存即可。
<key>Product Version</key>
<string>12.4.1</string>
1
2
唠嗑:
说一下为啥我会去降级,12.4.1是iOS12的*后一个版本,我的手机是iphone8,一款支持3D touch 的机型,我升级iOS13后发现这个功能变得不伦不类的,iOS13为了照顾那些新的不支持3D touch的机型,搞了一个haptic touch,就是用长按来实现一些类似3D touch的体验,但是经过我的体验过后,发现在已经支持3D touch的机型上存在问题,差不多两个功能同时存在了,反而使3D touch的体验大打折扣,幸运的是我在12*后一个版本关闭验证通道前回退到了12,从此,我的iOS就停留在了12.4.1,直到今天(2020.8)在*新的iOS中依旧没有修复这个问题,我也给苹果发过邮件,希望在已经支持3D touch的机型中不要引入haptic touch, 因为根本不需要,而且haptic touch也代替不了3D touch, 因为3D touch是有不同压感的,不同的压感有不同的反馈,这是硬件支持的,单纯的软件层

iOS开发中点击推送跳转到指定页面

消息推送在现在的App中很常见,但同一个App中推送的消息可能有多种类型,点击推送需要跳转到不同的指定页面。

做法:

我们在接收到推送的时候发送通知,每个页面都接收通知,如果有通知就在当前页面进行页面的跳转跳转到指定页面。

如果在每个页面中都添加接收通知的代码会很麻烦,我们可以将接收通知的代码添加到基类中,这样就简单、方便了许多。可有些项目中的代码中可能没有基类,就像我们公司中的这个项目,那也没问题,我们可以为视图控制器添加一个分类,将接收通知的代码添加到分类中,再在pch文件中导入此分类。

接收推送发送通知的代码:

– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

 

//关闭友盟自带的弹出框

[UMessage setAutoAlert:NO];

 

[UMessage didReceiveRemoteNotification:userInfo];

 

[[NSNotificationCenter defaultCenter] postNotificationName:@”pushNoti” object:nil];

 

}

接收通知进行页面跳转的代码,此代码在视图控制器的分类中:
+ (void)load

{

 

Method m1;

Method m2;

 

// 运行时替换方法

m1 = class_getInstanceMethod(self, @selector(statisticsViewWillAppear:));

m2 = class_getInstanceMethod(self, @selector(viewWillAppear:));

 

method_exchangeImplementations(m1, m2);

 

 

m1 = class_getInstanceMethod(self, @selector(statisticsViewWillDisappear:));

m2 = class_getInstanceMethod(self, @selector(viewWillDisappear:));

 

method_exchangeImplementations(m1, m2);

}

– (void) statisticsViewWillAppear:(BOOL)animated

{

[self statisticsViewWillAppear:animated];

[MobClick beginLogPageView:NSStringFromClass([self class])];

 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(push) name:@”pushNoti” object:nil];

}

-(void) statisticsViewWillDisappear:(BOOL)animated

{

[self statisticsViewWillDisappear:animated];

[MobClick endLogPageView:NSStringFromClass([self class])];

 

[[NSNotificationCenter defaultCenter] removeObserver:self name:@”pushNoti” object:nil];

}

– (void)push{

 

NotificationVC * notiVC = [[NotificationVC alloc] init];

notiVC.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:notiVC animated:YES];

}

该项目中之前的友盟统计就添加到了该分类中.
好了,本篇博客的主要内容就这些,谢谢阅读。

OpenCV 鼠标点击获取像素坐标并写入txt文件

OpenCV 鼠标点击获取像素坐标并写入txt文件

OpenCV 鼠标点击获取像素坐标 写入txt文件
前言
直接上代码
使用步骤
总结
系列文章
OpenCV图片批量处理
OpenCV鼠标点击获取像素坐标并写入txt文件 (就是本文)
想到再补充(゜∀。)
前言
学习计算机视觉的过程中,需要从txt读取像素坐标点,用手动输入感觉有点慢,所以参考网上大神写了将鼠标点击的像素坐标写入txt的方法。实现用的是OpenCV-Python。

直接上代码
import cv2 as cv

maxsize = (1280, 720) # 定义图片放缩大小
img = cv.imread(r’E:\PycharmProjects\Image_mapping\img\yintong.jpg’)
img = cv.resize(img, maxsize, cv.INTER_AREA)

# 鼠标事件
def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN:
xy = “%d,%d” % (x, y)
# 画圈(图像:img,坐标位置:xy,半径:1(就是一个点),颜色:蓝,厚度:-1(就是实心)
cv.circle(img, (x, y), 1, (255, 0, 0), thickness=-1)
cv.putText(img, xy, (x, y), cv.FONT_HERSHEY_PLAIN, 1.0, (0, 0, 0), thickness=1)
cv.imshow(“image”, img)
#写入txt
x_str = str(x)
y_str = str(y)
f = open(r”data\coordinate.txt”, “a+”)
f.writelines(x_str + ‘ ‘ + y_str + ‘\n’)

cv.namedWindow(“image”)
cv.setMouseCallback(“image”, on_EVENT_LBUTTONDOWN)
cv.imshow(“image”, img)

while (True):
try:
cv.waitKey(100)
except Exception:
cv.destroyAllWindows()
break

cv.waitKey(0)
cv.destroyAllWindows()

使用步骤
第4行的路径改成你要读取的目标图像
第19行的路径改成你要保存的txt文件位置
运行,用鼠标选点就好

 

CTF-密码学-36进制

CTF-密码学-36进制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
前言
一、题目是什么意思?
二、解题步骤
1.读入数据并运行
总结
前言
随着网络的不断发展,密码学这门技术也越来越重要,很多人都开启了学习密码学的学习,本文就介绍了*简单的进制基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考

一、题目是什么意思?
The length of alphanumeric is thirty six

*步 :下载并打开文件,一串数字,如下图所示。

59714216646867023270440406545399263948228435794919139272931

二、解题步骤
1.读入数据并运行
代码如下:

导入包:pip install base36
用法:

import base36
num=59714216646867023270440406545399263948228435794919139272931
print(base36.dumps(num))

D:\Python\python.exe d:/Users/lhb/PycharmProjects/pythonProject/test.py
flagis2fya2r884fnoekustyxmecv7a98blhwj

Process finished with exit code 0

<font color=#999AAA >
总结
这里对题目进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了解题思路

iOS NSNotification的使用

如果在一个类中想要执行另一个类中的方法可以使用通知
1.创建一个通知对象: 使用notificationWithName:object: 或者 notificationWithName:object:userInfo:

NSNotification* notification = [NSNotification notificationWithName:kImageNotificationLoadFailed(connection.imageURL)
object:self
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:error,@”error”,connection.imageURL,@”imageURL”,nil]];

这里需要注意的是,创建自己的通知并不是必须的。而是在创建自己的通知之前,采用NSNotificationCenter类的方法 postNotificationName:object: 和 postNotificationName:object:userInfo:更加便利的发出通知。这种情况,一般使用NSNotificationCenter的类方法defaultCenter就获得默认的通知对象,这样你就可以给该程序的默认通知中心发送通知了。注意:每一个程序都有一个自己的通知中心,即NSNotificationCenter对象。该对象采用单例设计模式,采用defaultCenter方法就可以获得唯一的NSNotificationCenter对象。

注意:NSNotification对象是不可变的,因为一旦创建,对象是不能更改的。

2.注册通知:addObserver:selector:name:object:

可以看到除了添加观察者之外,还有其接收到通知之后的执行方法入口,即selector的实参。因此为了进行防御式编程,*好先检查观察者是否定义了该方法。例如:添加观察者代码有

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(aWindowBecameMain:)
name:NSWindowDidBecomeMainNotification object:nil];

这里保证了self定义了aWindowBecameMain:方法。而对于一个任意的观察者observer,不能保证其对应的selector有aWindowBecameMain:,可采用[observer respondsToSelector:@selector(aWindowBecameMain:)]] 进行检查。所以完整的添加观察者过程为:

if([observer respondsToSelector:@selector(aWindowBecameMain:)]) {
[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(aWindowBecameMain:) name:NSWindowDidBecomeMainNotification object:nil];
}

注意到addObserver:selector:name:object:不仅指定一个观察者,指定通知中心发送给观察者的消息,还有接收通知的名字,以及指定的对象。一般来说不需要指定name和object,但如果仅仅指定了一个object,观察者将收到该对象的所有通知。例如将上面的代码中name改为nil,那么观察者将接收到object对象的所有消息,但是确定不了接收这些消息的顺序。如果指指定一个通知名称,观察者将收到它每次发出的通知。例如,上面的代码中object为nil,那么客户对象(self)将收到任何对象发出NSWindowDidBecomeMainNotification通知。如果既没有指定指定object,也没有指定name,那么该观察者将收到所有对象的所有消息。

3.发送通知:postNotificationName:object:或者performSelectorOnMainThread:withObject:waitUntilDone:

例如程序可以实现将一个文本可以进行一系列的转换,例如对于一个实例、RTF格式转换成ASCII格式。而转换在一个类(如Converter类)的对象中得到处理,在诚寻执行过程中可以加入或者删除这种转换。而且当添加或者删除Converter操作时,你的程序可能需要通知其他的对象,但是这些Converter对象并不需要知道被通知对象是什么,能干什么。你只需要声明两个通知,”ConverterAdded” 和 “ConverterRemoved”,并且在某一事件发生时就发出这两个通知。

当一个用户安装或者删除一个Converter,它将发送下面的消息给通知中心:

[[NSNotificationCenter defaultCenter]
postNotificationName:@”ConverterAdded” object:self];

或者是

[[NSNotificationCenter defaultCenter]
postNotificationName:@”ConverterRemoved” object:self];

通知中心将会区分它们对象对这些通知感兴趣并且通知他们。如果除了关心观察者的通知名称和观察的对象,还关心其他之外的对象,那么就把之外的对象放在通知的可选字典中,或者用方法postNotificationName:object:userInfo:。

而采用performSelectorOnMainThread:withObject:waitUntilDone:则是直接调用NSNotification的方法postNotification,而postNotificationName和object参数可以放到withObject的实参中。例如:

[[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:notification waitUntilDone:YES];//注意这里的notification为自定义的一个通知对象,可定义为NSNotification* notification = [NSNotification notificationWithName:@”ConverterAdded”object:self];//那么它的作用与上面的一致

4.移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

注意参数notificationObserver为要删除的观察者,一定不能置为nil。

PS:这里简单说一下通知中心保存的调度表。通知中心的调度表是给一些观察者指定的一些通知集。一个通知集是通知中心发出的通知的子集。每个表的入口包含:

通知观察者(必须要的)、通知名称、通知的发送者。

下图表示通知集中指定的通知的调用表入口的四种类型:
%title插图%num

下图表示四种观察者的调度表

%title插图%num

*后,提醒一下观察者收到通知的顺序是没有定义的。同时通知发出和观察的对象有可能是一样的。通知中心同步转发通知给观察者,就是说 postNotification: 方法直到接收并处理完通知才返回值。要想异步的发送通知,可以使用NSNotificationQueue。在多线程编程中,通知一般是在一个发出通知的那个线程中转发,但也可能是不在同一个线程中转发通知。

通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便、便捷,一个简单的Demo实现通知的跳转传值.

iOS通知传值的使用
输入所要发送的信息 ,同时将label的值通过button方法调用传递,

– (IBAction)buttonClick:(id)sender {

   //添加 字典,将label的值通过key值设置传递

   NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:self.textFieldOne.text,@”textOne”,self.textFieldTwo.text,@”textTwo”,nil];

   //创建通知

   NSNotification *notification =[NSNotification notificationWithName:@”tongzhi” object:niluserInfo:dict];

   //通过通知中心发送通知

   [[NSNotificationCenter defaultCenter] postNotification:notification];

   [self.navigationController popViewControllerAnimated:YES];

}

在发送通知后,在所要接收的控制器中注册通知监听者,将通知发送的信息接收

– (void)viewDidLoad {

   [super viewDidLoad];

   //注册通知

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tongzhi:)name:@”tongzhi” object:nil];

}

– (void)tongzhi:(NSNotification *)text{

   NSLog(@”%@”,text.userInfo[@”textOne”]);

       NSLog(@”-----接收到通知——“);

}

移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

注意参数notificationObserver为要删除的观察者,一定不能置为nil。

方格填数

方格填数

标题:方格填数

在2行5列的格子中填入1到10的数字。
要求:
相邻的格子中的数,右边的大于左边的,下边的大于上边的。

如【图1.png】所示的2种,就是合格的填法。

请你计算一共有多少种可能的方案。

请提交该整数,不要填写任何多余的内容(例如:说明性文字)。

%title插图%num

思路
将其看做一维数组,每个位置代表一个数字

def ad(a, b, k):
if len(a) == 0:
if b[0]<b[1]<b[2]<b[3]<b[4] and b[5]<b[6]<b[7]<b[8]<b[9] and b[0]<b[5] and b[1]<b[6] and b[2]<b[7] and b[3]<b[8] and b[4]<b[9]:
k += 1
return k
for i in range(len(a)):
b.append(a[i])
d = a.pop(i)
k = ad(a, b, k)
a.insert(i, d)
b.pop(-1)
return k

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = []
k = ad(a, b, 0)
print(k)

IOS 启动画面和图标设置(适配IOS7 and Xcode5)

关于IOS程序设置启动画面以及图标的设备目前主要为:IPhone设备 和IPad设备

IPhone启动画面以及图标的设置

目前IPhone的分辨率为:320X480、640X960、640X1136。

Default.png                    320X480 iPhone 320X480分辨率屏幕默认启动图片。

Default@2x.png             640X960 iPhone 640X960分辨率屏幕默认启动图片。

Default-568h@2x.png    640X1136  iPhone 640X1136分辨率屏幕默认启动图片。

————————————————————————————–

Icon.png                      57X57       10px   用户AppStore以及iPhone/iPod 中显示 必需

Icon@2x.png              114X114   20px  高清模式

Icon_120.png             120X120   20px  用于iPhone5的高清显示

Icon-Small.png           29X29       20px  用于设置以及Spotlight搜索

Icon-Small@2x.png   58X58      8px     用于Icon-Small.png的高清模式

Icon_80.png  80X80      8px   用于iPhone5在Spotlight搜索

—————————————————————————————

IPad启动画面以及图标设置

Default-Portrait.png                            768X1024        iPad专用竖向启动画面

Default-Landscape.png                      768X1024        iPad专用横向启动画面

Default-PortraitUpsideDown.png        768X1024        iPad专用竖向启动画面(Home按钮在屏幕上面)

Default-LandscapeLeft.png                768X1024        iPad专用竖向启动画面(Home按钮在屏幕左面)

Default-LandscapeRight.png              768X1024        iPad专用竖向启动画面(Home按钮在屏幕右面)

——————————————————————————————–

Icon-72.png         72X72       20px       用于在iPad桌面中显示必需

Icon-50.png         50X50       20px      用于iPad中的Spotlight搜索

Icon-29.png         29X29       10px      设置页面

 

ptorch索引、切片、连接和换位

ptorch索引、切片、连接和换位

目录:
1.torch.cat 使用dim对Tensor进行指定拼接
2.如何将一个Tensor按指定维度切片?
3.按照索引对元素进行聚合
4,如何按照索引选择目标数据?
5、如何选出满足矩阵条件的元素?
6.如何找出矩阵中的非零元素的索引?
7.如何将输入张量分割成相同形状的的chunks?
8.如何增加一个矩阵的维度(如1维变2维)?
9.如何实现Tensor维度之间的转置?
10.如何沿着某个维度切片后返回所有切片组成的列表?
1.torch.cat 使用dim对Tensor进行指定拼接
Tensor = torch.ones(2,3)
print(torch.cat([Tensor,Tensor]))
print(torch.cat([Tensor,Tensor],dim=0)) # 纵向拼接为一个矩阵
print(torch.cat([Tensor,Tensor],dim=1).shape) # 横向拼接为一个矩阵
# torch.stack 方法进行拼接
print(torch.stack([Tensor,Tensor],dim=1).shape) # 拼接为两个矩阵

2.如何将一个Tensor按指定维度切片?
x = torch.ones(2,10)
print(torch.chunk(x,5,dim=1)) # 横向切片,切为5个

3.按照索引对元素进行聚合
x = torch.Tensor([[33,66,9],[1,99,88]])
print(x)
result = torch.gather(x,1,torch.LongTensor([[0,1],[1,2]])) # 按索引取 维度1 *行的 1 2两个数 第二行的2 3 两个数
print(result)
print(result.shape)

4,如何按照索引选择目标数据?
x = torch.randn(2,7)
print(x)
# 参数1:原Tensor 参数2:维度 参数3:该维度上的索引
y = torch.index_select(x,1,torch.LongTensor([1,3,5]))
print(y)
z = torch.index_select(x,0,torch.LongTensor([1]))
print(z)

5、如何选出满足矩阵条件的元素?
x = torch.randn(2,4)
print(x)
mask = x.ge(0.5) # 大于0.5为1 小于0.5 为0
print(mask)
print(torch.masked_select(x,mask))

6.如何找出矩阵中的非零元素的索引?
x = torch.Tensor([[0.0,1.1],[6.6,0.0]])
print(x)
print(torch.nonzero(x))
———————————————————————-
result:
tensor([[0.0000, 1.1000],
[6.6000, 0.0000]])
tensor([[0, 1],
[1, 0]])

7.如何将输入张量分割成相同形状的的chunks?
x = torch.ones(2,5)
print(x)
print(torch.split(x,2,dim=1))
print(torch.split(x,1,dim=0))
print(torch.split(x,[2,3],dim=1))
———————————————————————
result:
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
(tensor([[1., 1.],
[1., 1.]]), tensor([[1., 1.],
[1., 1.]]), tensor([[1.],
[1.]]))
(tensor([[1., 1., 1., 1., 1.]]), tensor([[1., 1., 1., 1., 1.]]))
(tensor([[1., 1.],
[1., 1.]]), tensor([[1., 1., 1.],
[1., 1., 1.]]))

8.如何增加一个矩阵的维度(如1维变2维)?
x = torch.Tensor([1,2,3,4,5])
print(x.shape)
y = x.unsqueeze(dim=0) # 降维用squeeze()删除dim指定维度
print(y)
print(y.shape)
z = x.unsqueeze(dim=1)
print(z.shape)
———————————————————————–
result:
torch.Size([5])
tensor([[1., 2., 3., 4., 5.]])
torch.Size([1, 5])
torch.Size([5, 1])

9.如何实现Tensor维度之间的转置?
x = torch.randn(2,1)
print(x,x.shape)
y = torch.t(x)
print(y,y.shape)
z = torch.transpose(x,1,0)
print(z,z.shape)
print(x.t())
print(x.transpose(1,0))
———————————————————————–
result:
tensor([[0.6000],
[0.2830]]) torch.Size([2, 1])
tensor([[0.6000, 0.2830]]) torch.Size([1, 2])
tensor([[0.6000, 0.2830]]) torch.Size([1, 2])
tensor([[0.6000, 0.2830]])
tensor([[0.6000, 0.2830]])

10.如何沿着某个维度切片后返回所有切片组成的列表?
x = torch.rand(2,2,2)
print(x)
print(torch.unbind(x,dim=1))
———————————————————————–
result:
tensor([[[0.0420, 0.9931],
[0.5015, 0.7112]],

[[0.2467, 0.9473],
[0.7529, 0.8323]]])
(tensor([[0.0420, 0.9931],
[0.2467, 0.9473]]), tensor([[0.5015, 0.7112],
[0.7529, 0.8323]]))

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速